問題描述
我喜歡使用自定義欄位排除某些帖子。所以如果 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。