WordPressで投稿の並び順を操作する時
まずは、カスタムフィールドの値で並べて
カスタムフィールドの値が同じだったら投稿日順に並べる
のように並び替えの条件を複数使いたい時があったのでメモ。
投稿に発売日を入力するrelease_time
というカスタムフィールドを作っていたとします。
このrelease_time
が新しい順(大きい順)にして、発売日が同じだと管理画面で登録したのが新しいもの順になるイメージです。release_time
にはstrtotime
のような感じで数値が入ってるものとします
pre_get_posts
で投稿のアーカイブページの時の並び順を変更させます。
<?php // function.php function change_posts_query( $query ) { if( is_archive() ) { // 並び替えに使うカスタムフィールドを指定する $query->set('meta_key', 'release_time'); // カスタムフィールド順 > 日付順 // スペースを入れて2番目の並び順を指定する $query->set('orderby', 'meta_value_num date'); // 大きい方から順番にする (降順) $query->set('order', 'DESC'); } } add_action('pre_get_posts', 'change_posts_query');
これで上手く 発売日(release_time
)が新しい順かつ発売日が同じだったら投稿日の新しい順で表示させることができました。
ただ、このケースの場合 発売日も投稿日も両方とも降順で指定したいという要件だったのでorderby
の指定をスペース区切りで増やすだけでうまくいきましたが、発売日は新しい順(降順)で発売日が同じだったら投稿日が古い順(昇順)にしたいのようにorder
の条件が異なっている場合はこの方法では上手くいきません。
その方法はそのうち調べたら書きたいと思います。。。
やりました。
order
を別々に指定する方法
[参考]
- テンプレートタグ/query posts - WordPress Codex 日本語版
- query_posts, get_posts で複数の order 指定に対応する | wpxtreme
- 【WordPress】投稿を並び替える順番を指定する - Qiita
- 作者: Koi
- 出版社/メーカー: 芳文社
- 発売日: 2014/03/20
- メディア: Kindle版
- この商品を含むブログを見る