WordPress对主循环管理的很不错,但当你开始大刀阔斧的写自定义程序时,可能会在一个模板中使用多次循环,为了不造成潜在问题,每次循环结束后都应该重置WordPress循环。
为什么要重置WordPress循环?当我们在模板中使用诸如the_title()等模板标签时,实际上有很多全局变量在使用中,自定义循环会修改全局变量,假设在某个widget中使用query_posts()循环查询了评论数最多的10篇文章,查询后没有重置循环数据,首页显示的内容就会出错,本来应该显示所有文章,现在可能就显示评论数最多的文章了。如果文章中有多个自定义循环,不重置数据将会产生无法预料的错误。
重置WordPress循环的方法
总结一下,有三种方法,分别用于不同的情况,列表如下。
wp_reset_postdata() | wp_reset_query() | rewind_posts() |
使用WP_Query创建多个循环是使用,不接受任何参数,恢复$post全局变量的数据 | 使用query_posts()自定义循环时使用,不接受任何参数,不仅恢复$post全局变量,还会销毁之前的查询 | 需要重用同一个页面的查询结果时使用 |
实例
$random_post = new WP_query(); $random_post->query('cat=3&showposts=1&orderby=rand'); while ($random_post->have_posts()) : $random_post->the_post(); <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"> <img src="<?php echo get_post_meta($random_post->ID, 'featured', true); ?>"> </a> endwhile; wp_reset_postdata();
<?php query_posts('posts_per_page=3'); if (have_posts()) : while (have_posts()) : the_post(); ?> <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> <?php endwhile; endif; ?> <?php wp_reset_query(); ?>
if (have_posts()) : while (have_posts()) : the_post(); ?> <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> <?php endwhile; endif; ?> <?php rewind_posts(); ?> <?php while (have_posts()) : the_post(); ?> <?php the_content(); ?> <?php endwhile; ?>
请博主帮我看看,这个帖子提到的问题,是不是跟重置循环有关,应该怎么搞呢?
博主首页我一直点击查看最多的时候文章最多就显示到2012年12月的,那些之前的日志如何查看呢?
要看全部就只能在文章列表看,或者直接搜索需要的内容了,听你这一说我发现我还真没想过这事…