アーカイブの表示順、絞り込み、pre_get_posts/meta_query

情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。

イベントアーカイブは今日以降開催のみ、カスタムフィールド値で絞り込み時は条件を変えるpre_get_posts。
meta_query の書き方を覚えきれないので、メモ。

function change_order_for_event( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
       return;
     $today = date('Y-m-d');
    if ( $query->is_category('event') && isset($_GET['meta_key']) && $_GET['meta_key'] == 'student') {
       $query->set( 'posts_per_page', 10 );
       $query->set('meta_query',
                                array(
                                     array(
                                    'key' => 'student',
                                    'value' => 'true',
                                    'compare' => 'LIKE',
				    'type' => 'CHAR'
           )
         )
      );
   }     elseif ( $query->is_category('event') && isset($_GET['meta_key']) && $_GET['meta_key'] == 'online') {
       $query->set( 'posts_per_page', 10 );
       $query->set( 'orderby', 'meta_value' );
       $query->set( 'meta_key', 'date' );
       $query->set( 'order', 'ASC' );
       $query->set('meta_query',
                                array('relation' => 'AND',
                                    array(
                                    'key' => 'date',
                                    'value' => array( $today, '2100-12-31' ),
                                    'compare' => 'BETWEEN',
                                    'type' => 'DATE'
           ),
                                     array(
                                    'key' => 'online',
                                    'value' => 'true',
                                    'compare' => 'LIKE',
				    'type' => 'CHAR'
           )
         )
      );
   }    elseif ( $query->is_category('event')) {
       $query->set( 'posts_per_page', 10 );
       $query->set( 'orderby', 'meta_value' );
       $query->set( 'meta_key', 'date' );
       $query->set( 'order', 'ASC' );
       $query->set('meta_query',
                                array(
                                    array(
                                    'key' => 'date',
                                    'value' => array( $today, '2100-12-31' ),
                                    'compare' => 'BETWEEN',
                                    'type' => 'DATE'
           )
         )
      );
   }
}
add_action( 'pre_get_posts', 'change_order_for_event' );