meta_queryの絞込みで、'relation' => 'OR' が効かない
-
Advanced Custom Fieldsのでチェックボックス(複数選択可)のカスタムフィールドを作成しました。
フィールド名:week 選択肢: w0 : 日曜 w1 : 月曜 ・ ・ w6 : 土曜
ある投稿のweekフィールドにおいて、月・火・水にチェックを入れていると仮定し、
関連記事として月・火・水の全てにチェックが入っている投稿だけを抽出する場合、$week_meta_arr; for($i=0;$i<=6;$i++) { $str = 'w'.$i; if( false !== array_search($str, get_field('week')) ) { $week_meta_arr[] = array( 'key' => 'week', 'value' => $str, 'compare' => 'LIKE', ); } } $args = array( 'post_type' => 'posttype', 'posts_per_page' => -1, 'meta_query' => array( 'relation' => 'AND', $week_meta_arr, ); $the_query = new WP_Query($args);
とすることで、絞り込みができたのですが、
「月・火・水のいずれかにチェックが入っている記事」
を抽出しようと思ってもうまくできません。
meta_queryの’relation’ を ‘OR’にすれば行けると考えたのですが、
‘OR’にしても’AND’の挙動と変わらず、月・火・水の全てにチェックが入っていないと
抽出されません。どのようにすれば、ORでの絞込が動くようになるのでしょうか?
よろしくお願いします。
-
print_r($the_query);
ご掲示されたコードですと、$the_query->requestにmeta_queryの記述が見当たらないのではないかと思います(なぜANDで絞り込みができているのかは謎です…)。
ということでネット上にあるサンプルなどと$the_query->queryを見比べてみると、meta_queryの形式が違っているのがわかります。どういった修正がいいのかはわかりませんが、
$week_meta_arr = array( 'relation' => 'OR' );
で初期化したうえで、ご掲示のコードで曜日を追加し、
$args = array( 'post_type' => 'posttype', 'posts_per_page' => -1, 'meta_query' => $week_meta_arr, );
という感じでWP_Queryに渡すパラメータをつくるのがいいのではないかと思います。
あと、そのままでも大丈夫だとは思うのですが、ACFのサンプルにあるように曜日を追加するときは、
'value' => '"'.$str.'"',
と記述したほうが確実かもしれません…。
手元で試してみました。
下記のコードでうまく、「月、水、金」のいずれかにチェックが入っている記事を抜き出せました。
$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'week', 'value' => 'w0', // 月 'compare' => 'LIKE', ), array( 'key' => 'week', 'value' => 'w2', // 水 'compare' => 'LIKE', ), array( 'key' => 'week', 'value' => 'w4', // 金 'compare' => 'LIKE', ), ) ); //$the_query = new WP_Query($args); var_dump(get_posts($args));
記述のところで生まれてしまったバグですね。
meta_queryの中身が二重の配列になっているせいで認識できないんだと思います。下記のコードは質問者さんのコードに合わせた書き方です。
for($i=0; $i<=6; $i++) { $str = 'w'.$i; $week_meta_arr[] = array( 'key' => 'week', 'value' => $str, 'compare' => 'LIKE', ); } $week_meta_arr['relation'] = 'OR'; $args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'meta_query' => $week_meta_arr, ); var_dump(get_posts($args));
- トピック「meta_queryの絞込みで、'relation' => 'OR' が効かない」には新たに返信することはできません。