前提・実現したいこと
pre_get_posts
で定義した記事を一覧として出力しています。
その記事をAdvanced Custom Fieldsのカスタムフィールドで設定した日時で並び替えたいですが、うまく並び替わりません。
カスタムフィールドは下記のように3つに分かれています。
- 開催日(例:2019/1/1)
- 開始グループの時間(例:9)
- 開始グループの分(例:30)
※上記の場合、2019/1/1 9時30分
function.php
function twpp_change_sort_order( $query ) { if(is_admin() || ! $query->is_main_query()){ return; } if($query->is_tax('seminar-category')) { $query->set('order', 'DESC' ); $query->set('orderby', array( '開催日' => 'DESC', '開始_時' => 'DESC', '開始_分' => 'DESC', )); $query->set('posts_per_page', 5); ); } } add_action('pre_get_posts', 'twpp_change_sort_order');
記事一覧を出力している箇所
<?php if(have_posts()): while(have_posts()): the_post(); ?> // タイトルなど <?php endwhile; endif; ?>
追記(7/24 11:01)
下記コードに修正したら思うどおりに動いたのですが、、、
function twpp_change_sort_order( $query ) { if(is_admin() || ! $query->is_main_query()){ return; } if($query->is_tax('seminar-category')) { $query->set('posts_per_page', 5); $query->set('meta_query', array( 'relation' => 'AND', 'my_custom_filed_date' => array( 'key' => '開催日' ), 'my_custom_filed_hour' => array( 'key' => '開始_時', ), 'my_custom_filed_min' => array( 'key' => '開始_分', ), ) ); $query->set('orderby', array( 'my_custom_filed_date' => 'ASC', 'my_custom_filed_hour'=>'ASC', 'my_custom_filed_min'=>'ASC', ) ); } } add_action('pre_get_posts', 'twpp_change_sort_order');
ここにさらに、「開催日時より後の記事(今が7/24 13:00の場合、7/24 13:10以降の開催日の記事)は出力しない」という処理を追加したいので下記のようにコードを変えたら、開催日以降の記事は出力されないのですが、開始時間と分の条件が効きませんでした。
どうすればいいでしょうか。
function twpp_change_sort_order( $query ) { if(is_admin() || ! $query->is_main_query()){ return; } if($query->is_tax('seminar-category')) { $query->set('posts_per_page', 5); $query->set('meta_query', array( 'relation' => 'AND', 'my_custom_filed_date' => array( 'key' => '開催日' ), 'my_custom_filed_hour' => array( 'key' => '開始_時', ), 'my_custom_filed_min' => array( 'key' => '開始_分', ), array( 'key' => '開催日', 'value' => date_i18n('Ymd'), 'compare' => '<=', array( 'key' => '開始_時', 'value' => date_i18n('G'), 'compare' => '<=', array( 'key' => '開始_分', 'value' => date_i18n('i'), 'compare' => '<=' ), ), ), ) ); $query->set('orderby', array( 'my_custom_filed_date' => 'ASC', 'my_custom_filed_hour'=>'ASC', 'my_custom_filed_min'=>'ASC', ) ); } } add_action('pre_get_posts', 'twpp_change_sort_order');
回答1件
あなたの回答
tips
プレビュー