WP_Query with Custom Field Parameter (checkbox)


WP_Query with Custom Field Parameter (checkbox)

我正在尝试设置一个自定义查询,该查询只返回没有选中自定义元字段复选框的帖子。复选框元字段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'
        )
    )
);

您可以将多个比较链接在一起,并使用ORrelation属性,其中任何一个都应返回true。