问题描述
我喜欢使用自定义字段排除某些帖子。所以如果 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。