2021年9月3日

Advanced Custom Fieldsチェックボックスの値でquery posts投稿取得ができないときは

Advanced Custom Fieldsのチェックボックスの値を数字にしていてquery posts投稿取得の絞り込みできないとき

ACF選択肢の設定

チェックボックスで複数選択可能な選択肢を作成

1 : boho
2 : hippie
3 : gypsy

悪い例

category_IDの数字と選択された値(数字)を完全一致させた投稿を取得したいができない例
$args = array(
   'posts_per_page' => -1,
   'meta_key' => 'bohemian_cat',
   'meta_value' => $category_ID,
   //'meta_compare' => '=',//デフォルト
);
query_posts( $args );

絞れない原因

複数選択された情報はシリアライズされた形式で{s:値のバイト数:"値";}のようにmeta_valueとして保存される。echoしてみると
echo post_custom('bohemian_cat');

a:2:{i:0;s:1:"2";i:1;s:1:"3";}

'meta_compare' => 'LIKE',だけでは対策にならない

シリアライズされた形式内にバイト数の数字が入るためバイト数の数字と一致してしまう可能性があるため

良い例

シリアライズされた形で保存形式ないの「:"値";」をターゲットにし部分一致検索
$args = array(
   'posts_per_page' => -1,
   'meta_key' => 'bohemian_cat',
   'meta_value' => ':"' . $category_ID . '";';
   'meta_compare' => 'LIKE',
);
query_posts( $args );

参考サイト

Wish I could be Comic Sans ついにマイコンピューターでインターネットを始めたの
わたしはヨガマットデザイナー

fzfeed