問題描述

我喜歡使用自定義字段排除某些帖子。所以如果 my_custom_field_ignore 發行和 1 忽略這個帖子。如果沒有設置包含它。

這是我所擁有的

    $args = array(
        'post_type' => $post_type,
        'offset' => $offset,
        'meta_query' => array(
            array(
                'key' => 'my_custom_field_ignore',
                'value' => '1',
                'compare' => '!=',
            )
        )
    );

這僅適用於 my_custom_field_ignore 設置為 1 以外的帖子

如何包括所有帖子 (當然不是 my_custom_field_ignore = 1 的帖子)?

編輯:

這是它在 WP 3.5+上的工作原理

    'meta_query' => array(
        array(
            'key' => 'my_custom_field_ignore',
            'compare' => 'NOT EXISTS',
        )
    )

這樣簡單的搜索 my_custom_field_ignore 的外觀,所以值將被忽略。雖然這可能起作用,但是當他們將 1 更改為 0 時,用户可能會感到困惑,並期望被包含在內。

似乎 3.3 和 3.4 需要一些條件檢查。

編輯 2

看起來被檢查的回答是訣竅 (至少 3.5+) 。由於一些奇怪的原因,它忽略了第一個帖子”Hello World” 。添加 my_custom_field_ignore 後,將其刪除後即可正常工作

最佳解決方案

如果我們定義條件:

A: my_custom_field_ignore EXISTS
B: my_custom_field_ignore = 1

那麼 NOT ( A && B )相當於:

NOT ( A ) || NOT ( B )

我們的意思是:

( my_custom_field_ignore NOT EXISTS ) ||  ( my_custom_field_ignore != 1 )

因此,我們可以嘗試以下 WP 3.5+(未測試):

 $args = array(
    'post_type'  => $post_type,
    'offset'     => $offset,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'my_custom_field_ignore',
            'value'   => '1',
            'compare' => '!=',
        ),
        array(
            'key'     => 'my_custom_field_ignore',
            'compare' => 'NOT EXISTS',
            'value'   => '1',     #<-- just some value as a pre 3.9 bugfix (Codex)
        ),
    )
);

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。