Open3

WordPressで複数のカスタムフィールドでソートする

ちあきちあき

広告の掲載開始日・終了日でソートしたい場合

  • 終了日が遅い順にソートする
  • でも終了日が被ったときは開始日が早い順にする

といった、カスタムフィールドでのソート調整のコード。

function custom_pre_get_posts( WP_Query $query ): void {
	if ( is_admin() || ! $query->is_main_query() ) {
		return;
	}

	if ( $query->is_archive() ) {
		$query->set(
			'meta_query',
			array(
				'relation'          => 'AND',
				'end_date_clause'   => array(
					'key'     => 'end_date',
					'compare' => 'EXISTS',
					'type'    => 'DATE',
				),
				'start_date_clause' => array(
					'key'     => 'start_date',
					'compare' => 'EXISTS',
					'type'    => 'DATE',
				),
			)
		);
		$query->set(
			'orderby',
			array(
				'end_date_clause'   => 'DESC',
				'start_date_clause' => 'ASC',
			)
		);
	}
}

add_action( 'pre_get_posts', 'custom_pre_get_posts' );