我喜欢用自定义字段排除某些帖子。所以如果my_custom_field_ignore
isset和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
)?
Edit:
这就是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需要一些条件检查。
Edit 2
似乎勾选答案就可以了(至少对于3.5以上的版本)。出于某种奇怪的原因,它忽略了第一篇帖子“Hello World”。添加后
my_custom_field_ignore
然后把它取下来
最合适的回答,由SO网友:birgire 整理而成
如果我们定义条件:
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)
),
)
);