我遇到了这样的情况,我正在创建一个自定义的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篇文章,没有任何错误,但在我主页的“最近发表的文章”部分,该部分没有显示最近发表的文章,而是显示了与上述类别文章相同的文章。
我想一定有办法在显示分类帖子后重置查询。请帮帮我。
SO网友:Pieter Goosen
您的问题是自定义查询。不要使用Wordpress默认使用的变量。$posts
和$post
是Wordpress保留的全局变量。改变$post
一个唯一的变量,类似于$posts_query
.
使用时get_posts
您需要设置postdata以使用模板标记,您没有选择权,只能使用$post
像setup_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();
}