Codeworks Notes

 2022-12-28

 2024-07-10

Wordpress
バックエンド

サブループにカスタムフィールドの比較条件を加える

単体なら 'meta_key' => 'custom_key' でいいんだけどね。
複数条件あったりするともう使えないんでね。

概要

サブループ作るとき WP_Query でインスタンス吐くじゃないですか。
あれ投稿タイプとか日付とか昇順 / 降順細かく設定できるので大体それで事足りるんですが、カスタムフィールドに期限日入れるような投稿があって、その期限日が過ぎたか過ぎてないかで投稿を絞りたい、ということがあった時、条件指定の中での比較ってどうやるのか、ということです。

まあそんなこと滅多にないんですけど忘れそうなんで。

<?php
// 今日の日付を取得
$current_date = date('ymd');

// サブループの条件指定
$args = array(
	'post_type' => 'custom_post', // 投稿タイプ
	'posts_per_page' => 10, // 表示件数
	'orderby' => 'date', // 表示順の基準
	'order' => 'DESC', // 昇順・降順 (ASC / DESC)

  // ここからカスタムフィールドの条件指定
	'meta_query' => array(
		'relation' => 'AND',
		array(
			'key' => 'deadline',
			'value' => $current_date,
			'compare' => '>=',
			'type' => 'DATE'
		),
		array(
			'key' => 'deadline',
			'value' => "",
			'compare' => '==',
		)
	)
); 
?>

meta query を使う

カスタムフィールドの値を取得するには meta_query を使います。
その中で配列を組んで key にカスタムフィールド名を入れることで取得できます。

なお、compare で比較演算子を指定することで比較することができますが、取得される値が全て String 型になることに注意が必要です。日付型や数値型などを明示的に指定する必要があるときには type も指定が必要です。

こうすればサブループ内で比較して投稿の取捨選択ができます。
メインループは functions.php で似たようなことをするのですが、ちょっと書き方があるので後日。