• 解決済 chouji

    (@dive_kei)


    特定のカスタムフィールドの値を持った記事の一覧表示を
    考えておりますが、うまく出来ず困っております。

    現在、各記事に下記のようにカスタムフィールドの値を指定しています。

    記事A key:custom_id value:book2
    記事B key:custom_id value:book22
    記事C key:custom_id value:book33

    WP_Queryで下記のように指定を行った所、

    $args = array(
    	'post_type' => 'page',
    	'meta_query' => array(
    		array(
    			'key' => 'custom_id',
    			'value' => 'book2',
    			'compare'=>'LIKE'
    		)
    	)
     );
    $my_query =  new WP_Query( $args );

    記事A だけでなく、記事A・記事B が表示されてしまいます。
    どなたか解決策を御存知の方がいらっしゃいましたらご教授ください。

    よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • compare の指定をなくしてください。

    トピック投稿者 chouji

    (@dive_kei)

    jim912様、ご回答ありがとうございます。

    こちらの質問が不足しておりましたので再度投稿させて頂きます。
    カスタムフィールドの値はカンマ区切りで複数も考えておりまして。

    記事A key:custom_id value:book2
    記事B key:custom_id value:book5,book2
    記事C key:custom_id value:book4,book3

    この場合に、取得したい記事は、記事A 記事B のため
    compare の指定で LIKE を付けています。
    只、カスタムフィールドの値が下記の場合、

    記事A key:custom_id value:book2
    記事B key:custom_id value:book52,book2
    記事C key:custom_id value:book24,book3

    取得したいのは、記事A・記事B なんですが、
    記事A・記事B・記事Cが表示されます。

    説明不足で申し訳ございませんでした。

    書いてて気づきましたが、登録の際に数字の後ろに
    何か入れておけば出来そうな気がしますので後で試してみます。

    ドキュメントには書いてありませんが、Meta Query の compare は REGEXP や RLIKE を使わせてくれます。

    'meta_query' => array(
        array(
            'key'     => 'custom_id',
            'value'   => '[[:<:]]book2[[:>:]]',
            'compare' => 'REGEXP'
        )
    )

    とかすると、どうでしょう? 当然ですが、LIKE の方が速いです。

    トピック投稿者 chouji

    (@dive_kei)

    kjmtsh様、ご回答ありがとうございます。

    ご提示いただきましたソースで希望の表示を行えました。
    また、compare で REGEXP や RLIKE を使えるのを知りませんでしたので勉強になりました。
    表示速度ですが記事数が少ないため今の所は問題ありません。

    記事数を増やして元のソースを変えずに、値の後にsを付けて book2s とし、
    表示した場合と比べて検証してみたいと思います。

    ありがとうございました

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「特定のカスタムフィールドの値を持った記事の一覧」には新たに返信することはできません。