我正在尝试设置一个自定义查询,该查询只返回没有选中自定义元字段复选框的帖子。复选框元字段id为position-filled
。
这是我的代码:
$args = array (
'post_type' => 'jobs',
'posts_per_page' => 4,
'post__not_in' => array(get_the_id()),
'meta_query' => array(
array(
'key' => 'position-filled',
'value' => 'on', // also tried passing null and removing 'compare'
'compare' => '!=' // also tried 'NOT LIKE'
)
),
);
$customQuery = new WP_Query($args);
然而,这不会返回任何帖子(我已经确定有帖子没有复选框。
知道我做错了什么吗?
我在向现有帖子/页面添加自定义字段时遇到了类似的问题,我需要在这些帖子/页面上搜索"未检查"或"未选择"字段。
归根结底,查询实际上是说,"给我一些帖子,其中元键(位置填充)是填充的,但没有填充值'on'"。
如果你在不选中复选框的情况下重新保存你的帖子,它能起作用吗?
如果是这样,您也可以尝试使用'NOT EXISTS'
的'compare'
值。尽管我相信,如果你使用NOT EXISTS
,然后有人在没有选中复选框的情况下保存了一篇旧的帖子,它将存在(具有空白值)。
[编辑]
我忘了提一下,您可以在情况为true(NOT EXISTS
或确实存在,但值为空/未选中)的情况下构建查询。
$args = array(
'post_type' => 'jobs',
'posts_per_page' => 4,
'post__not_in' => array(get_the_id()),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'position-filled',
'value' => 'on',
'compare' => '!='
),
array(
'key' => 'position-filled',
'value' => '',
'compare' => 'NOT EXISTS'
)
)
);
您可以将多个比较链接在一起,并使用OR
的relation
属性,其中任何一个都应返回true。