
ページの一覧を構成するとき、並び順を管理しやすくしたいのです。
最初から備わっている「順序」項目をうまく活用したいです。

WordPress
クエリ結果を
複数条件でソート
WordPressで投稿を一覧にしたいときなどに使うWP_Queryです。
まるでSQLですね。
抽出条件の指定に加えて、ソート条件も指定可能です。
そのソート条件に関して、単一ではなく、複数条件にしたいというお話です。
単一条件の場合と異なる書き方になります。
やりたかったこと
固定ページやカスタム投稿タイプに関する話だと思います。
一覧化するときにカスタマイズしたページを構成したいのです。
並び順(ソート)の話です。

管理画面のページ一覧には、「順序」という項目があります。
デフォルトでは、数字が小さい方から大きい方へ並ばせるような使い方です。
昇順です。
今回は、重みづけのようなかたちで、数字が大きい方から並べたいと考えました。
降順です。
もちろんマイナス値にして管理してもよいのですが。。
後で分かりにくくなるのもよろしくないと考えました。

もともと存在する項目を使えれば、以降の管理も楽だろうという考え方です。
クイック編集で値を調整することで、並び順も調整できます。
加えて、カスタムフィールドなどの他の要素もソート順に加えたい考えです。
- 「順序」を正の数で重みづけ
- 投稿日が古いものから
ここでは上記で考えます。
2番目のソート条件は、明記してもしなくても変わらないわけですが。
書き方の備忘録なので。
やったこと

WP_Query
でページを抽出します。
その際に、並び順も指定します。
並べるときの条件は複数のカラムを指定可能です。
PHPの編集です。
外観のテーマファイルエディターで、対象のファイルを選んで、対応する部分を書き替えました。
'order'は書かずに'orderby'のみを配列で書く
書き方のお作法を調べると、'orderby'
にて、カラムとソート方向を配列で指定できます。
複数条件の場合はこの書き方です。
そのときに'order'
は書きません。
'orderby' => array('menu_order'=>'DESC', 'post_date'=>'ASC')
WordPressでは、単一カラムでのソートの場合、ソートの方向とカラムを別プロパティに指定する書き方ですよね。
なんだか独特です。
よくある書き方は以下ですが。
今回はこれではないです。
// よく見る書き方ですが、今回はこちらではありません。
'order' => 'DESC' // 降順を指定
'orderby' => 'menu_order' // 「順序」カラムを指定
書いたコード(コピペできるはず)
デフォルメしていますが、肝心な部分はコピペして使えるはずです。
先にクエリ用の文言を作成
$args = array(
// (省略)
'orderby' => array(
'menu_order' => 'DESC',
'post_date' => 'ASC',
),
// (省略)
);
「menu_order
」が「順序」です。
ページ編集画面や一覧画面のクイック編集などで設定できる値です。
整数値です。
今回は、数字が大きいほど重い → 大きいほど上位 という考え方で整理する予定なので、降順(DESC
)にしています。
「post_date
」は「投稿日」です。
昇順(ASC
)なので、古いほうから並んでいきます。
これはデフォルト値なので、あえて書かなくても大丈夫なものですね。
作成した文言でクエリ発行
$query = new WP_Query($args)
変数にクエリを書いておくやり方です。
いちいち格納せず、その場で構成する方法もありますね。
WP_Queryの使い方(公式ドキュメント)
参考文献です。
公式のマニュアルです。情報量が多く、ページ表示に時間がかかります。
通信環境やブラウザーによっては、応答しなくなる時間が発生するかもしれないです。
ページ表示まで焦らずに待ちましょう。
↓ ↓ ↓ ソートの部分を触接見たい場合 ↓ ↓ ↓
ご意見やご感想などお聞かせください! コメント機能です。