説明
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() |

コメント