サポート » 使い方全般 » meta_queryのvalue値に渡す引数について

  • お世話になっております。

    チェックボックスの動的な値を取得し、
    それをmeta_queryを使用して検索しようとしておりますが、
    下記コードでは検索がヒットしません。

    $keywd = "array('tokyo','kanagawa')";
    
    $args = array(
        'meta_query' => array(
          'relation' => 'OR',
          array(
            'key' => 'area',
            'value' => $keywd ,
            'compare' => 'IN'
          )
        )
    );

    下記の様に直書きだとうまくいきますが、引数を使うとヒットしません。
    8行目 ‘value’ => array(‘tokyo’,’kanagawa’),

    meta_queryのvalueにarrayの引数を渡すことはできませんか?
    何か良い方法はないでしょうか。
    どうぞ宜しくお願い致します。

2件の返信を表示中 - 16 - 17件目 (全17件中)
  • 私も勉強になりました。ありがとうございます。

    一つ訂正させてください。前に「無理をすれば LIKE が使える」と書きましたが、私の環境では、シリアライズされたデータを文字列として、LIKE 検索しても、0.00 ミリ秒~ 0.03 ミリ秒程度で処理が終わるので、環境によっては、実用に使えるとしてください(MySQL 5.5 on Debian wheezy)。EXPLAIN で調べると、やはり MySQL は、meta_key のインデックスは使いませんが、wp_users.ID と wp_usermeta.umeta_id、wp_usermeta.user_id のインデックスはちゃんと使われています。

    同じ必要が生じて、いろいろ調べてました。
    Advanced Custom Fieldsのチェックボックスを使ってカスタムフィールドを保存すると、シリアライズされたテキストとしてDBに保存されます。そのようなカスタムフィールドを対象にmeta_queryするにはLIKEでなければヒットしません。
    それが複数のカスタムフィールドにまたいでしまうならmeta_queryは使えなくなってします。

    それで、これがシリアライズされたテキストではなく、add_post_metaの第三要素をfalseで保存すれば、値は一つ一つ別個に格納されます。ということはmeta_queryを使ってINでヒットさせることができます。

    ACFをやめてCFまわりをスクラッチするか、ACFを使いつつも投稿保存時にダミーCFキーにfalseで保存させるかすれば可能です。

    わたしは今回は後者を採用しました。
    このトピックをしっかりは読み込んでいませんので、見当違いだったらごめんなさい。でもこのトピックのおかげで解決できました。

    参考まで。

    あと、このトピックがfixしているようでしたら、「解決済み」にしておかれるといいかもしれません。「解決済み」にすると、コメントできなくなります。

2件の返信を表示中 - 16 - 17件目 (全17件中)
  • トピック「meta_queryのvalue値に渡す引数について」には新たに返信することはできません。