0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WordPressのmeta_queryでカスタムフィールドの空の初期値を取得する方法

Last updated at Posted at 2024-10-02

【これを書くに至った経緯】

wordpressカスタムフィールドの真偽のチェックボックスですが、チェックボックスを管理画面から設定で追加した際のチェックボックスをデバッグしてみると初期値は空、チェックした場合は1、チェックを外すと値は0になります。そこで、meta_queryの絞り込みで、チェックボックスに対して、チェックをした状態や外した状態の、0と1は取得できますが、何も設定していないときの初期値である空の状態は、valueを""やNULLで指定しても取得することができませんでした。。

【結論から言うと】

WordPressの meta_query では、真偽のチェックボックスの初期値が空(未設定)の状態を取得するために、compareNOT EXISTS を使用する必要があります。これにより、メタデータが保存されていない投稿も取得できます。

【なぜvalueを""(空文字)で指定してるのに初期値を取得できないか】

チェックボックスが空の状態、つまり未設定の場合、WordPressはそのメタキーをデータベースに保存しないことがあります。したがって、meta_queryvalue を空文字や NULL としても、該当する投稿が取得できません。この問題を解決するためには、compareNOT 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);

このコードでは、次の条件に基づいて投稿を取得します:

  1. チェックされている投稿 (display_flag = 1)

  2. チェックが外されている投稿 (display_flag = 0)

  3. 初期値が空の投稿(メタキーが存在しない)

【まとめ】

カスタムフィールドでの真偽のチェックボックスが空(未設定)の状態を取得するには、NOT EXISTS を使用してメタキーが存在しない投稿も絞り込む必要があります。これにより、初期値が空の投稿を含めて検索結果に含めることが可能になります。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?