情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・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' );