【これを書くに至った経緯】
wordpressカスタムフィールドの真偽のチェックボックスですが、チェックボックスを管理画面から設定で追加した際のチェックボックスをデバッグしてみると初期値は空、チェックした場合は1、チェックを外すと値は0になります。そこで、meta_queryの絞り込みで、チェックボックスに対して、チェックをした状態や外した状態の、0と1は取得できますが、何も設定していないときの初期値である空の状態は、valueを""やNULLで指定しても取得することができませんでした。。
【結論から言うと】
WordPressの meta_query
では、真偽のチェックボックスの初期値が空(未設定)の状態を取得するために、compare
に NOT EXISTS
を使用する必要があります。これにより、メタデータが保存されていない投稿も取得できます。
【なぜvalueを""(空文字)で指定してるのに初期値を取得できないか】
チェックボックスが空の状態、つまり未設定の場合、WordPressはそのメタキーをデータベースに保存しないことがあります。したがって、meta_query
で value
を空文字や NULL
としても、該当する投稿が取得できません。この問題を解決するためには、compare
に NOT EXISTS
を指定して、メタキーが存在しない投稿を取得する必要があります。
【解決方法】
次のコードを使用することで、チェックボックスが 1
(チェックされている)、0
(チェックが外されている)、またはメタキーが存在しない(初期値が空)投稿を全て取得できます。
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'display_flag',
'value' => '1',
'compare' => '='
),
array(
'key' => 'display_flag',
'value' => '0',
'compare' => '='
),
array(
'key' => 'display_flag',
'compare' => 'NOT EXISTS'
)
)
);
$query = new WP_Query($args);
このコードでは、次の条件に基づいて投稿を取得します:
-
チェックされている投稿 (display_flag = 1)
-
チェックが外されている投稿 (display_flag = 0)
-
初期値が空の投稿(メタキーが存在しない)
【まとめ】
カスタムフィールドでの真偽のチェックボックスが空(未設定)の状態を取得するには、NOT EXISTS を使用してメタキーが存在しない投稿も絞り込む必要があります。これにより、初期値が空の投稿を含めて検索結果に含めることが可能になります。