WP_QUERY失败,尽管有1个帖子

时间:2014-06-13 作者:user1915665

我正在使用以下参数执行典型的自定义帖子类型查询:

array (size=4)
  \'post_type\' => string \'custom_post_type\' (length=15)
  \'post_status\' => string \'publish\' (length=7)
  \'posts_per_page\' => int 5
  \'p\' => string \'2943\' (length=4)
然而令人惊讶的是,尽管有一篇帖子被查询(而且确实存在),我还是得到了一个false 在have\\u POST的循环中

这是什么奇怪的现象造成的?有1个帖子!

    $wp_query = new WP_Query( $args );
    if ( have_posts() ) :
        //...
        while ( have_posts() ) : the_post();
        //more dots ... dot dot dot ...
        endwhile;
        //...
    else:
        echo \'No stuff found ... dot dot dot\';
    endif;

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

了解如何使用WP_Query.

   $args = array(
   \'post_type\' => \'cameras\',
   \'posts_per_page\' => 5,
);
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
    echo \'<ul>\';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo \'<li>\' . get_the_title() . \'</li>\';
    }
    echo \'</ul>\';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
你应该去看看你是怎么注册的post_type. 除此之外,您如何在页面上使用查询。确实有一个或多个查询。如果有多个查询,则查询可能有问题。此外,如前所述,请检查您的帖子的post\\u状态。

如果您只需要计算一个特定的post,您可以只执行以下操作,而无需将其他语句用于post类型

$args = array(
       \'p\' => 2943,
    );
    $the_query = new WP_Query( $args );
在这个阶段,不可能确定一个问题。只是一个提示,再次冲洗你的永久性皮肤

SO网友:Will

尝试呼叫have_posts()the_post() 使用对象操作符。因此,请编辑您的代码:

$wp_query = new WP_Query( $args );
    if ( $wp_query->have_posts() ) :
        //...
        while ( $wp_query->have_posts() ) : $wp_query->the_post();
        //more dots ... dot dot dot ...
        endwhile;
        //...
    else:
        echo \'No stuff found ... dot dot dot\';
    endif;

SO网友:Otto

$wp_query = new WP_Query( $args );
if ( have_posts() ) :
如果在函数或其他代码中执行此操作,那么$wp\\u查询与主循环函数(如have\\u posts())实际查看的$wp\\u查询不同。

主循环函数使用全局$wp\\u查询实例,这是WordPress为主循环生成的主实例。对于你的案子来说,那个可能是空的。

您应该这样做:

$my_custom_query = new WP_Query( $args );
if ( $my_custom_query->have_posts() ) : 
   while ( $my_custom_query->have_posts() ) : $my_custom_query->the_post();
然后您的各种循环函数将正常工作,因为现在您正在从自定义查询加载\\u post()。

结束