正在尝试从QUERY_POST更改为WP_QUERY

时间:2019-02-27 作者:joloshop

我正在运行一个主题,该主题使用query_post 现在我想把它改成WP_Query. 然而,我总是得到一个只有标题的空白页面。这是我的问题:

query_posts(array(
    \'post_type\' => APP_POST_TYPE,
    \'post_status\' => \'publish\',
    APP_TAX_STORE => $term->slug,
    \'ignore_sticky_posts\' => 1,
    \'posts_per_page\' => -1
));
而不是调用循环文件get_template_part( \'loop\', \'coupon\' );在这里面我有if ( have_posts() ) : while ( have_posts() ) : the_post();.

我将此更改为WP\\U查询

$args = array(
    \'post_type\' => APP_POST_TYPE,
    \'post_status\' => \'publish\',
    APP_TAX_STORE => $term->slug,
    \'ignore_sticky_posts\' => 1,
    \'posts_per_page\' => -1
));
$query = new WP_Query( $args );
和至if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();

但我太困了。。。

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

这里的问题是由变量作用域引起的。。。

使用global时一切正常$wp_query, 因为它是一个全局变量,函数如下have_poststhe_post 知道这一点,因此可以在模板部件中使用它们。

另一方面,您可以定义自定义查询。然后,您得到模板部分,并希望在该模板中使用该变量,但该变量在其中不可访问,因为它不是全局变量。

这就是为什么将代码划分为多个部分的方式不那么常见的原因。如果你这样写的话,它会更好,更容易维护,更安全:

$args = array(
    \'post_type\' => APP_POST_TYPE,
    \'post_status\' => \'publish\',
    APP_TAX_STORE => $term->slug,
    \'ignore_sticky_posts\' => 1,
    \'posts_per_page\' => -1
));
$query = new WP_Query( $args );
while ( $query->have_posts() ) :
    $query->the_post();
    get_template_part( \'loop\', \'coupon\' );  // or get_template_part( \'content\', \'coupon\' );
endwhile;
并且在loop-coupon.php 应该是单帖的内容。

通过这种方式,您可以对不同的循环使用相同的模板部件,因此更容易重用。

相关推荐

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

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