🐡

WordPress ACFの真偽フィールドのWP_Queryでの挙動について

2024/04/19に公開

最近Advanced Custom Fields(ACF)の真/偽フィールドで、チェックのついていない投稿のみをWP_Queryで抽出しようとした時、以下のコードを記述したが思うように抽出できませんでした。

$args = array(
  'post_type'      => 'example-type',
  'post_status'    => 'publish',
  'order'          => 'desc',
  'orderby'        => 'post_date',
  'posts_per_page' => 10,
  'meta_query'     => [
    'relation'     => 'AND',
    [
      'key'     => 'example-type-boolean',
      'value'   => false, 
      'compare' => '=',
      'type'    => 'BOOLEAN',
    ],
  ],
);
$query = new WP_Query($args);

普段trueの時は'value' => 'true',で行けていたのでfalseの時もいけるかなと思ったらいけず・・・。

どうやらWPの使用でチェックがついていない = 入力されていない状態として認識されているようで、falseとはなりませんでした。
また(ChatGPTに確認したところ)、最初から入力していない状態のfalseと一度チェックをつけている状態から外した状態のfalseも別物として認識されるようで、これらを合わせて抽出できるようにWP_Queryを変更する必要がありました。

以下では目的の記事を抽出することができました。

$args = array(
  'post_type'      => 'example-type',
  'post_status'    => 'publish',
  'order'          => 'desc',
  'orderby'        => 'post_date',
  'posts_per_page' => 10,
  'meta_query'     => [
    'relation'     => 'OR',
    [
      'key'     => 'example-type-boolean',
      'value'   => true, 
      'compare' => '!=',
      'type'    => 'BOOLEAN',
    ],
    [
      'key'     => 'example-type-boolean',
      'compare' => 'NOT EXISTS',
    ],
  ],
);
$query = new WP_Query($args);

一つ目はチェックを外した状態のfalseでtrue以外を指定、二つ目は未入力のもの、これらどちらかの条件下での記事を抽出するというQueryになってます。

ただ、本当にfalseって書くだけだとできないのか・・・?
(有識者の方ご意見お待ちしております)

Discussion