WordPressのmeta_queryを使ったカスタムフィールドによる検索をしてみた

WordPress3.1よりmeta_queryが実装され、カスタムフィールドを用いた検索方法が細かく設定できるようになったようなので試してみました。

従来の方法

従来の方法は「meta_key」と「meta_value」を一つずつ指定するのみでした。

例えば「hoge」と名前の付けられたカスタムフィールドの値が「fuga」と設定されている記事を検索するには以下のように書きます。

query_posts( array(  
    "meta_key" => "hoge",
    "meta_value" => "fuga"
) );

また、「meta_compare」に、「=」(デフォルト)、「!=」、「>」、「>=」、「<」、「<」の指定をして異なる検索結果を得ることが出来ます。

先ほどの例にmeta_compareを追加することで、「hoge」という名前の付けられたカスタムフィールドの値が「fuga」と設定されていない記事を検索することが可能です。

query_posts( array(  
    "meta_key" => "hoge",
    "meta_value" => "fuga",
    "meta_compare" => "!="
) );

meta_queryを用いた方法

meta_queryを用いると、従来は一つのカスタムフィールドしか検索できなかったものが、複数のカスタムフィールドを指定することが出来ます。

query_posts( array(  
    "meta_query" => array(
        array(
            "key" => "hoge",
            "value" => "fuga"
        ),
        array(
            "key" => "foo",
            "value" => "bar"
        )
    )
) );

上記の例では「hoge」の値が「fuga」と設定されており、且つ、「foo」の値が「bar」と設定されている記事を検索出来ます。

また、条件式の「compare」も追加されており、「LIKE」、「NOT LIKE」、「IN」、「NOT IN」、「BETWEEN」、「NOT BETWEEN」という曖昧な検索を行えるようになりました。

以下のように記述することで、「hoge」に「fuga」という文字列を含み、「foo」(配列)の値が「bar」を持たない記事を検索できます。

query_posts( array(  
    "meta_query" => array(
        array(
            "key" => "hoge",
            "value" => "fuga",
            "compare" => "LIKE"
        ),
        array(
            "key" => "foo",
            "value" => "bar",
            "compare" => "NOT IN"
        )
    )
) );

単純なブログとして利用する分にはあまり使わないかもしれない機能ですが、少し規模を大きくしていくと必要となってくる場合があります。

以前であればadd_filter等を用いて回りくどく設定しないといけない内容でしたが大分楽に行えるようになりました。
こういう機能は増えていくと嬉しいですね。