WP_Meta_Query クラスの使い方|説明・引数・注意点

説明

WP_Meta_Query は、カスタムフィールドの値を条件にして投稿を絞り込む仕組みを表すクラスです。WP_Query の meta_query に指定する条件を組み立てます。

基本構文

meta_query => array( array( 'key' => '...', 'value' => '...', 'compare' => '...' ) )

引数

  • key:メタキー
  • value:比較する値
  • compare:= / != / > / LIKE / IN / BETWEEN / EXISTS など
  • type:NUMERIC / DATE など
  • relation:複数条件の結合(AND / OR)

戻り値

WP_Query の引数として使います。

使い方(サンプル)

$q = new WP_Query( array(
	'post_type'  => 'post',
	'meta_query' => array(
		array(
			'key'     => 'price',
			'value'   => 1000,
			'compare' => '>=',
			'type'    => 'NUMERIC',
		),
	),
) );

注意点

  • 数値の比較では type を NUMERIC にしないと、文字列として比較されます。
  • メタ条件が多いと、クエリが重くなります。

実務での使いどころ

  • WP_Query の meta_query に渡す条件(カスタムフィールドでの絞り込み)を、理解するとき。
  • 複数の条件を、AND・OR で、組み合わせるとき(relation)。

よくあるミスと対処

  • type を NUMERIC にせず、数値を、文字列として比べる。10 が 9 より小さく並ぶ。
  • 日付の比較で、保存した形式(Ymd か Y-m-d)と、比べる値の形式が、違う。
  • relation を指定せず、条件が、すべて AND になる。
  • メタ値が、存在しない投稿は、条件によって、除外される。

NG例

'meta_query' => array(
	array( 'key' => 'price', 'value' => 100, 'compare' => '>' ), // 文字列として比較される
),

OK例

'meta_query' => array(
	'relation' => 'AND',
	array( 'key' => 'price', 'value' => 100, 'compare' => '>', 'type' => 'NUMERIC' ),
	array( 'key' => 'stock', 'value' => 0, 'compare' => '>', 'type' => 'NUMERIC' ),
),

使い分け早見表

やりたいこと 使うもの
カスタムフィールドで絞り込む WP_Query の meta_query
タクソノミーで絞り込む WP_Query の tax_query
1つのキーを、取得する get_post_meta()

関連項目

WP_Query、get_post_meta()、WP_Tax_Query

公式リファレンス:WP_Meta_Query | WordPress Developer Resources

コメント

タイトルとURLをコピーしました