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