🐡
WordPress ACFの真偽フィールドのWP_Queryでの挙動について
最近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