对于附件和自定义META_QUERY,WP_QUERY未按预期工作

时间:2012-05-15 作者:Mike

如果我使用get_posts() 就像这样,我得到了很多结果,值为1my_key meta\\u键:

$posts = get_posts( 
    array( 
        \'post_type\'  => \'attachment\', 
        \'meta_key\'   => \'my_key\', 
        \'meta_value\' => \'1\' 
    ) 
);

//this has a bunch of results as expected
print_r($posts);
但是,如果使用WP\\u query创建类似的查询,则会得到一个空的结果数组

$args = array(
   \'post_type\' => \'attachment\',
   \'meta_query\' => array(
       array(
       \'key\'     => \'my_key\',
       \'value\'   => \'1\',
       \'compare\' => \'=\',
       \'type\'    => \'BINARY\'

      )
   )
);

$query = new WP_Query();
$results = $query->query($args);
//this is empty
print_r($results);
我尝试了几种meta\\u查询数组,但都没有成功。我想这可能是一个bug,但我想先确保我没有遗漏什么。

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

首先,只需将参数传递给WP_Query 因为这既干净又符合Codex documentation of the class.

您应该构建如下内容:

$my_key_query_args = array(
   \'post_type\'   => \'attachment\',
   \'post_status\' => \'inherit\',
   \'meta_query\'  => array(
       array(
           \'key\'     => \'my_key\',
           \'value\'   => \'1\',
           \'compare\' => \'=\',
           \'type\'    => \'BINARY\'

      )
   )
);

$my_key_query = new WP_Query( $my_key_query_args );
第二,注意添加的post_status 数组的参数。默认情况下,添加的附件的发布状态为“继承”,但WP_Query 将查找状态为“已发布”、“草稿”或“待定”的帖子(请参见documentation 以及该参数)。

所以这里没有bug,我们只是忘记检查传递给对象的所有参数的默认值。

在“附件”选项上有一个注释post_type 调用此要求的参数:

默认WP\\U查询集\'post_status\'=>\'published\', 但附件默认为\'post_status\'=>\'inherit\' 因此,您需要将状态设置为\'inherit\'\'any\'.

SO网友:mrwweb

我相信你的问题在于WP_Query 喜欢get_posts(). 很可能查询正在运行,但您就是看不到结果。WP_Query 返回循环使用的查询对象,如下所示:

...
$my_query = WP_Query( $args );
while( $my_query->have_posts() ) : $my_query->the_post();

// do your thing

endwhile;
另外,请注意,我使用了$my\\u查询。我对此有点模糊,但我相信$query可能是WordPress的一个保留变量,无论哪种方式,如果您使该查询更具可读性(可能是event$attachment\\u meta\\u query或其他内容),通常会更好。

结束

相关推荐

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

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