読者です 読者をやめる 読者になる 読者になる

ひとりまとめ

もろもろのメモ

WordPressのカスタムフィールドを条件にして投稿を抽出したい!数値で!

Drupalについで、今度はWordPress

タイトルと本文以外の項目を入力できる「カスタムフィールド」というのがありますが、ここに入力した内容をもとに投稿を抽出したい場合の話です。

 

※WordPress4.2.2で検証しています。

 

まずは使う関数について。

get_posts()というのを今回は利用します。これに連想配列を渡してあげると、その条件にあった投稿が取得できるという仕組みです。

 

さっそくその指定する条件についてですが、気がつくのに時間を要した重要事項が1つあります。それは「普通に指定すると、文字列として判定されちゃう」というもの。それに気がつかず、なーんかおかしな結果が返ってくるなーと思って悩んでいました。。

 

ということで、その条件指定方法です。

$args = array(

    'meta_query' => array(

        'relation' => '[ORかANDで、これから記述する条件の関係を指定]',

        array(

            'key' => '[カスタムフィールドの名前]',

            'value' => '[比較したい値]',

            'compare' => '[以上以下などの記号]',

            'type' => '値の判定方法',

        ),

        array(

        [必要な数だけ↑のように条件をつらつらと書く]

        ),

    )

);

$posts = get_posts($args);

 

実際の記述でいうと、こんな感じ。

$args = array(
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => '価格',
            'value' => '5000',
            'compare' => '>',
            'type' => 'NUMERIC',

       ),

       array(
            'key' => '価格',
            'value' => '10000',
            'compare' => '<',
            'type' => 'NUMERIC',
       ),
    ),
);
$posts = get_posts($args);

 

1つの条件で抽出するだけなら、meta_queryを設定しなくても、meta_keyとmeta_value、meta_compare、meta_typeという名前で指定することで対応できました。また、上では数値の比較をやっていますが、DATEなんかも使えるようです。

 

compareで不等号などが使えるのでつい何気なくやってはまってしまいました。