将WordPress发布查询重置为默认

时间:2015-06-07 作者:EpicNeer

我遇到了这样的情况,我正在创建一个自定义的wordpress主题,但我被一些东西卡住了。

在我的索引/主页中,首先我按类别显示6篇文章,如下所示

<?php $posts = get_posts(\'category=2&numberposts=6\'); foreach($posts as $post) {
      <h2><?php the_title(); ?></h2>
<?php } ?>
现在,在按类别成功显示6篇文章之后,我想使用下面的代码使用主帖子循环显示最近的文章。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
     <h2><?php the_title() ?></h2>
     _e(\'<p class="nopost">Sorry, no posts matched your criteria.</p>\');
endif;?>

The Problem:

我的主页按类别显示了6篇文章,没有任何错误,但在我主页的“最近发表的文章”部分,该部分没有显示最近发表的文章,而是显示了与上述类别文章相同的文章。

我想一定有办法在显示分类帖子后重置查询。请帮帮我。

1 个回复
SO网友:Pieter Goosen

您的问题是自定义查询。不要使用Wordpress默认使用的变量。$posts$post 是Wordpress保留的全局变量。改变$post 一个唯一的变量,类似于$posts_query.

使用时get_posts 您需要设置postdata以使用模板标记,您没有选择权,只能使用$postsetup_postdata() 需求$post 传递给它。这将中断主查询$post 全局,所以一旦完成,您需要重置它。这是用wp_reset_postdata().

请注意,在usng时,默认情况下模板标记不可用get_posts, 所以您需要添加setup_postdata( $post ); 在您的foreach 循环以使模板标记的使用可用

您的自定义查询应该如下所示

$posts_query = get_posts( \'YOUR ARGUMENTS\' );
if ( $posts_query ) {
    foreach ( $posts_query as $post ) {
        setup_postdata( $post ); 

        // You can now use template tags like the_title() and the_content()

    }
    wp_reset_postdata();
}

结束

相关推荐

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

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