查询不存在元键的所有帖子

时间:2013-01-12 作者:JordanBel

我正在尝试获取一个查询,以检索特定meta_key 不存在,然后创建它。

我在查找这些帖子时遇到了问题,因为我正在测试的查询似乎不起作用。

下面是我用来获取这些帖子的代码:

$args = array(
   \'posts_per_page\' => 18,
   \'cat\'=>1955,
   \'post_status\'=>\'publish\',
   \'meta_query\' => array(
                  array(
                     \'key\' => \'colors\',
                     \'compare\' => \'NOT EXISTS\'
                  ),
   ));      

query_posts($args);
如果没有包含该键的帖子,则不会返回任何内容colors, 但是他们回来了ids 有钥匙的帖子colors 只要有钥匙(与我需要的相反)。我试过了EXIST 相反,却没有运气。

如果有人能告诉我如何正确创建我需要的查询,我将不胜感激。

谢谢

3 个回复
最合适的回答,由SO网友:Tomas Buteler 整理而成

我对此做了更多的测试,老实说,我找不到它不起作用的原因(除非上面的代码只是一个片段,真正的代码适合我下面的示例)。然而,我确实发现了一些可能会引导你走向正确方向的事情。

1) 就其本身而言,此元查询相当于“colors is NULL”,即它将返回Posteta表中未设置该键的帖子。这就是上面所示的情况,它应该是有效的。

\'meta_query\' => array(
    array(
     \'key\' => \'colors\',
     \'compare\' => \'NOT EXISTS\' // this should work...
    ),
)
2)在WordPress 3.9之前,将“关系”索引建立为“或”会更改此条件。它返回相反的结果。别问我为什么。这在执行多个元查询时尤其重要。这意味着最初不可能对“colors”键设置为“blue”(或其他)或根本没有设置的帖子进行查询。下面的查询将忽略第一个条件,只返回与第二个条件匹配的条件。

\'meta_query\' => array(
   \'relation\' => \'OR\',
    array(
     \'key\' => \'colors\',
     \'compare\' => \'NOT EXISTS\' // doesn\'t work
    ),
    array(
     \'key\' => \'colors\',
     \'value\' => \'blue\'
    )
)
3)然而,如果我们设置“值”,我们可以欺骗WordPress使用第一个条件。它不需要相关的值(据我所知,它被忽略了),但它needs to be set 为了NOT EXISTS 条件产生任何影响。

\'meta_query\' => array(
   \'relation\' => \'OR\',
    array(
     \'key\' => \'colors\',
     \'compare\' => \'NOT EXISTS\', // works!
     \'value\' => \'\' // This is ignored, but is necessary...
    ),
    array(
     \'key\' => \'colors\',
     \'value\' => \'blue\'
    )
)
这在WordPress 3.9之前都是正确的。如果您仍在使用旧版本,这是一个可行的解决方法。

SO网友:i_a

使用自定义查询,这对我很有用:

SELECT * FROM wp_posts as posts
            WHERE   posts.post_type     = \'post\'
            AND NOT EXISTS (
              SELECT * FROM `wp_postmeta`
               WHERE `wp_postmeta`.`meta_key` = "your_meta_key"
                AND `wp_postmeta`.`post_id`=posts.ID
            ) 

SO网友:Pravin Work

这对我有用。

\'meta_query\' => array(
   \'relation\' => \'OR\',
    array(
     \'key\' => \'colors\',
     \'compare\' => \'NOT EXISTS\' // doesn\'t work
    ),
    array(
     \'key\' => \'colors\',
     \'value\' => \'blue\'
    )
)

结束

相关推荐

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

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