使用 WP_Query 自定义 WordPress Loop
April 13th, 2008 Denis
本文翻译自 Define Your Own WordPress Loop Using WP_Query,有删节。
我们都知道 WordPress Loop?如果不知道,网上有很多关于 WordPress Loop 的教程。
一个最容易操纵 WordPress Loop 的方法是使用 query_posts 这个函数。
但是使用 query_posts,你可以存在以下风险:
- 可能会干扰那些用到了 Loop 的插件。
- 可能使一些 WordPress 条件标签失效。
- 需要去处理重新设置,重新倒回和偏移等问题。
所以个人觉得最好的方法是使用 WP_Query,并创建自己的 Loop。
使用 WP_Query 自定义 WordPress Loop
第一步是使用 WP_Query 类创建你自己的变量。
在下面的例子中,我们创建一个最新日志列表:
<?php $recentPosts = new WP_Query(); $recentPosts->query('showposts=5'); ?>
上面代码定义了一个叫做 recentPosts 的变量,它是一 WP_Query 类的一个实例。
然后我使用了 WP_Query 的一个方法开始一个查询,你甚至可以使用和 query_posts 一样的参数。
现在可以开始我们自己的 Loop:
<?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?> <!-- do some stuff here --> <?php endwhile; ?>
我们这里用了 WP_Query 的两个方法,分别是 have_posts 和 the_post。你可以从这篇文章全局变量和 WordPress 主循环了解更多关于这两个函数。
这样做的好处是你在 Loop 中的时候,你可以使用标准的 post tags。
完整代码
下面是使用自定义的 Loop 先是最新5篇文章的完整代码:
<h3>Recent Articles</h3> <ul> <?php $recentPosts = new WP_Query(); $recentPosts->query('showposts=5'); ?> <?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?> <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul>
总结
使用 WP_Query 自定义 WordPress Loop 是不干扰默认 Loop 而去跑自定义查询的一种简单方法。这同样是完全独立去跑多个 Loop 得好方法。
WordPress 官方文档参考:





1. Kusanagi | April 13, 2008 at 10:27 pm | #
看完了,一点也不懂,沙一个发先.
2. 胖逗逗 | April 13, 2008 at 10:37 pm | #
和楼上一样,一点没看懂
3. li | April 13, 2008 at 11:07 pm | #
老鱼,WordPress Related Posts插件能专门显示某一分类下的相关文章吗?你的功能里面有不显示某一分类的设置,不知道能不能使用函数来专门 调某一单独分类下的相关文章
4. Denis | April 13, 2008 at 11:45 pm | #
需要修改源程序。
5. Qianli | April 13, 2008 at 11:28 pm | #
请教一下,使用wp_query、query_posts函数与使用foreach+get_posts相比哪个更好?我以前也常用wp_query,但现在基本都用foreach+get_posts了,感觉更灵活一些
6. Denis | April 13, 2008 at 11:44 pm | #
没有更好,只是自己使用习惯的问题。
7. KimCool | April 14, 2008 at 12:25 am | #
8. askie | April 14, 2008 at 12:29 am | #
比较深入的研究了!支持!
9. may | April 14, 2008 at 9:20 am | #
看不懂
纯支持
10. tomdbtel | April 14, 2008 at 9:25 am | #
呵呵,好方法。
11. zEUS. | April 14, 2008 at 1:28 pm | #
好文章,多谢分享!
12. MO | April 14, 2008 at 2:10 pm | #
一直在用这些,就是没有深入研究…收藏下来,慢慢琢磨下…
13. Andor | April 14, 2008 at 9:41 pm | #
还是习惯使用
query_posts()14. 浪的狼 | May 8, 2008 at 4:46 pm | #
“$recentPosts = new WP_Query();
$recentPosts->query(’showposts=5′);”
这应该是创建了一个对象吧,不是变量吧.一个类的实例化
15. 浪的狼 | May 8, 2008 at 4:46 pm | #
“$recentPosts = new WP_Query();
$recentPosts->query(’showposts=5′);”
这应该是创建了一个对象吧,不是变量吧.是一个类的实例化
16. 浪的狼 | May 8, 2008 at 4:48 pm | #
哦,忘了,PHP越学越晕了,变量包括对象
惭愧惭愧