WP_Queryでカスタムフィールドを取得する

WP_Queryでカスタムフィールドを取得する

WP_Queryでカスタムフィールドを条件として指定する方法を紹介します。

サブループでもあまり使用することはないかもしれません。

しかし、検索フォームなど設置する場合はカスタムフィールドを条件としたいときがあると思います。

カスタムフィールドのクエリは条件次第ではとても複雑になってしまします。

そのため、出来る限り使わないようにと敬遠している人もいるのではないでしょうか。

取得例も載せておきますので、参考にしてみてください。

また、プラグインでも便利なものもあります。

プラグインで行いたい方は「Search&Filter」の記事を参考にしてください。

カスタムフィールドの取得方法

カスタムフィールドの取得には二つ種類があります。

一つは簡易的な取得方法

もう一つは条件を組み合わせることができる取得方法です。

両方とも紹介します。

参考にする値が一つの場合などは「簡易的な取得方法」、複数取得する場合は「条件を組み合わせることができる取得方法」で取得します。

簡易的な取得方法

簡易的な取得方法では以下のように取得します。

$args = [
    'meta_key'     => 'test_key',
    'meta_value'   => 'test_value',
    'meta_compare' => '!='
];

meta_key」・・・カスタムフィールドのキーを指定します。

meta_value」・・・カスタムフィールドの値を指定します。

meta_compare」・・・「meta_value」で指定した値との比較演算子を指定します。デフォルトは「=」。

使用できるのは「=」「!=」「>」「<」「<=」「>=」「LIKE」「NOT LIKE」「IN」「NOT IN」「BETWEEN」「NOT BETWEEN」「NOT EXISTS」「REGEXP」「NOT REGEXP」「RLIKE」が使用できます。

上記の例ではカスタムフィールドのキー「test_key」の値が「test_value」でないものを取得します。

条件を組み合わせることができる取得方法

複数の条件を「AND」「OR」で接続して取得することができます。

$args = [
    'meta_query' => [
        [
            'key'    => 'test_key',
            'value'  => 'test_value',
            'compare' => '!='
            'type'    => 'CHAR'
        ]
   ]
];

簡易的な取得方法と同じ取得は上記のようになります。

key」・・・カスタムフィールドのキーを指定します。

value」・・・カスタムフィールドの値を指定します。

compare」・・・「value」で指定した値との比較演算子を指定します。デフォルトは「=」。使用できる演算子は「meta_compare」と同様です。

type」・・・カスタムフィールの型指定を行うことができます。デフォルトは「CHAR」

使用できるのは「CHAR」「BINARY」「NUMERIC」「DATE」「DECIMAL」「SIGNED」「UNSIGNED」「TIME」が使用可能です。

上記4つのパラメーターに加えてもう一つパラメーターがあります。

relation」・・・同じ階層で複数のmeta_queryの配列を使用している場合に論理演算子を指定することができます。

「AND」「OR」が使用可能です。デフォルトは「AND」です。

relation」を使用した例を見てみます。

$args = [
    'meta_query' => [
        'relation'  => 'AND',
        [
            'key'    => 'test_key',
            'value'  => 'test_value',
            'compare' => '!='
            'type'    => 'CHAR'
        ],
        [
            'key'    => 'test_key',
            'value'  => 'test_value2',
            'compare' => '!='
            'type'    => 'CHAR'
        ]
   ]
];

上記の例ではカスタムフィールドのキー「test_key」の値が「test_value」でないものかつ「test_key」の値が「test_value2」でないものを取得します。

実際に使用される例だと値段など数値の絞り込みなどが便利です。

$args = [
    'meta_query' => [
        'relation'  => 'AND',
        [
            'key'    => 'price',
            'value'  => '1000',
            'compare' => '>='
            'type'    => 'NUMERIC'
        ],
        [
            'key'    => 'price',
            'value'  => '2000',
            'compare' => '<'
            'type'    => 'NUMERIC'
        ]
   ]
];

この場合値段が「1000円~1999円」のものを取得しています。

カスタムフィールドでソートして取得する

カスタムフィールドで検索し、取得した内容をソートしたい場合があると思います。

値段の安い順、高い順やカスタムフィールドに設定した日付の新しい順など。

上記の書き方を少し変形すると可能になります。

$args = [
    'meta_query' => [
        'relation'  => 'AND',
        'meta_price' => [
            'key'    => 'price',
            'value'  => '1000',
            'compare' => '>='
            'type'    => 'NUMERIC'
        ],
        'orderby'   => [
            'meta_price' => 'asc'
        ]
   ]
];

キーを指定していなかった配列にキーをしています。このようにキーを明示することでそのキーでソート可能になります。

上記であれば、値段が「1000円以上」で昇順で取得できます。

さいごに

検索フォームなどで使用する場合は、受け取った値に応じてmeta_queryを作成できるようにしておくと、幅広く対応できます。