サブループをカスタムフィールドで絞り込む・除外する

ワードプレスPHPアドバンスドカスタムフィールドカスタムフィールドサブループ

「注目の記事」とか「PICK UP!」とか、目立たせる記事を大きく出して、一覧には出さない、ってよく使う処理だと思います。

専用のタクソノミー、タームで処理した方が簡単な場合もありますが、タグリストの処理が必要になります。

また、カスタムフィールドにしておけばMW WP Formにも応用しやすかったりするので使い分けたいところです。

カスタムフィールドでの絞り込み

$args = array(
	'post_type'			=> 'news',
	'posts_per_page'	=> '8',
	'meta_query' => array( 
		array(
			'key'		=> 'pick_up',
			'value'		=> 'true',
			'compare'	=> 'LIKE'
		)
	)
);
$query = new WP_Query( $args );
if( $query->have_posts() ){
	while( $query->have_posts() ){
		$query->the_post();
		the_title();
	}
	wp_reset_postdata();
}

カスタムフィールド名:pick_up

カスタムフィールド値:true

比較方法:LIKE

カスタムフィールド「pick_up」にチェックが入った記事タイトルを出せ、という意味です。

カスタムフィールドでの除外

絞り込みはLIKEで出来ますが、除外はNOT LIKEだけではNG。

「pick_up」フィールドを足す前と後では、記事の持つカスタムフィールド値が異なるので。

$args = array(
	'post_type'			=> 'news',
	'posts_per_page'	=> '8',
	'meta_query' => array( 
		'relation' => 'OR',
		array(
			'key'		=> 'pick_up',
			'value'		=> 'true',
			'compare'	=> 'NOT LIKE'
		),
		array(
			'key'		=> 'pick_up',
			'compare'	=> 'NOT EXISTS'
		);
	)
);
$query = new WP_Query( $args );
if( $query->have_posts() ){
	while( $query->have_posts() ){
		$query->the_post();
		the_title();
	}
	wp_reset_postdata();
}
  • カスタムフィールド値が「true」ではない記事
  • カスタムフィールド値が「空っぽ」の記事

どちらかに当てはまる記事を出せ、とします。

条件3つで「or」

「pick up」以外に絞り込み条件が重なる場合もあると思いますが、続けて3つ目の条件を足してもNG。入れ子にするなどして工夫。

そもそも「or」は2者の比較なので、「a || b || c」みたいにはいかない。

やると、エラーは出ずタイムアウトします。