WordPressでは、カスタムフィールドを活用することで柔軟な検索機能を構築できます。特に複数のカスタムフィールドの値をすべて満たす「AND検索」を実装したいケースは多いでしょう。この記事では、WP_Query
を使ってAND条件で複数のカスタムフィールドを検索する方法を紹介します。
meta_queryでAND検索を指定する
WP_Query
の meta_query
パラメータは、複数のカスタムフィールドに対する検索条件を指定するために使用します。AND条件を明示するには 'relation' => 'AND'
を指定し、それぞれの条件を配列で記述します。
$args = array(
'post_type' => 'post',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => 'blue',
'compare' => '='
),
array(
'key' => 'size',
'value' => 'large',
'compare' => '='
)
)
);
$query = new WP_Query($args);
この例では、color
フィールドが「blue」かつ size
フィールドが「large」である投稿のみが取得されます。
カスタム投稿タイプにも対応可能
検索対象が post
ではなく、カスタム投稿タイプ(例:product
)である場合は、'post_type' => 'product'
のように変更するだけで対応できます。
LIKEや範囲検索も可能
数値の範囲検索や部分一致の条件も利用可能です。たとえば、価格が「500以上1000以下」の投稿を検索する場合は次のように記述します。
$args = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => 'blue',
'compare' => '='
),
array(
'key' => 'price',
'value' => array(500, 1000),
'type' => 'NUMERIC',
'compare' => 'BETWEEN'
)
)
);
$query = new WP_Query($args);
type
を指定することで、正しく数値として比較されます。
meta_queryを使う上での注意点
- カスタムフィールドが未設定の場合、該当しない投稿として除外されます。
compare
やtype
の指定を忘れると意図しない結果になることがあります。- 複雑な条件が多い場合、クエリのパフォーマンスに注意が必要です。
まとめ
複数のカスタムフィールドを使ったAND検索は、meta_query
による条件の組み立てで実現可能です。用途に応じて LIKE
や BETWEEN
を組み合わせることで、さらに柔軟な検索が可能になります。ユーザーの目的に合った絞り込み機能を作成して、WordPressの活用の幅を広げましょう。