使用META_QUERY NOT IN筛选帖子,其中VALUE具有多个值

时间:2012-09-23 作者:Vayu Robins

我想使用meta_key 在该键中存储多个值。此后,我想过滤掉键中不包含特定值的帖子。换句话说,只显示不包含特定值的帖子。然而,这似乎是不可能的。我在这里写这个问题是想看看是否有人得出了同样的结论,或者我只是遗漏了什么。以下是我使用的代码:

// The values in key "_no_interest" are: 1,2,3
add_action( \'pre_get_posts\', \'custom_pre_query\' );
function custom_pre_query( $query ) {
    if( $query->is_main_query() && !is_admin() && $query->is_post_type_archive( \'my_custom_post_type\' ) ) {
        $meta_query = array(
            array(
                \'key\'       => \'_no_interest\',
                \'value\'     => \'3\',
                \'compare\'   => \'NOT IN\'
            )
        );
        $query->set( \'meta_query\', $meta_query );
        $query->set( \'posts_per_page\', -1 );
        $query->set( \'post_status\', \'publish\' );
        $query->set( \'orderby\', \'date\' );   
    }
}
这将不起作用,如果我使用\'!=\' 操作人员但是,如果我将比较设置为等于\'IN\'\'=\', 那就行了。

有人能证实这一点吗?还是我遗漏了什么?

1 个回复
SO网友:Otto

The NOT IN and!=比较运算符可以很好地工作,但是请注意,如果您使用的是meta,那么您的数据可能不会以您期望的方式工作。具体来说,meta\\u键不必每个帖子都是唯一的。帖子可以将\\u no\\u interest设置为1,也可以将另一个meta行设置为2。

因此,例如,如果您有一篇文章的\\u no\\u interest设置为1,并且在另一行中也设置为2,那么即使您排除了2,该文章仍然会出现,因为它在另一行中有一个1。

此外,若您使用IN或不使用IN,那个么“value”参数实际上应该是一个值数组。因此,您的值“3”应该是数组(“3”)。

还要注意的是,拥有一个帖子中不存在的meta,也会给你带来意想不到的结果。如果你写的帖子中的meta没有什么价值,那么根本没有meta的帖子也不会出现。换句话说,他们必须为meta设置一个值,而不是那个特定的值。这是因为指定元会导致发生内部联接,从而消除缺少该元的行。例外情况是使用NOT EXISTS比较。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post