【WordPress】複数のカスタムフィールドでAND検索を実現する方法

【WordPress】複数のカスタムフィールドでAND検索を実現する方法 WordPress

WordPressでは、カスタムフィールドを活用することで柔軟な検索機能を構築できます。特に複数のカスタムフィールドの値をすべて満たす「AND検索」を実装したいケースは多いでしょう。この記事では、WP_Query を使ってAND条件で複数のカスタムフィールドを検索する方法を紹介します。

meta_queryでAND検索を指定する

WP_Querymeta_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を使う上での注意点

  • カスタムフィールドが未設定の場合、該当しない投稿として除外されます。
  • comparetype の指定を忘れると意図しない結果になることがあります。
  • 複雑な条件が多い場合、クエリのパフォーマンスに注意が必要です。

まとめ

複数のカスタムフィールドを使ったAND検索は、meta_query による条件の組み立てで実現可能です。用途に応じて LIKEBETWEEN を組み合わせることで、さらに柔軟な検索が可能になります。ユーザーの目的に合った絞り込み機能を作成して、WordPressの活用の幅を広げましょう。