首页 » WordPress » 使用 WP_Query 自定义 WordPress Loop

使用 WP_Query 自定义 WordPress Loop

April 13th, 2008 at 10:00pm 雪山飞猪 浏览: 912

本文翻译自 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_poststhe_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 官方文档参考:

作者:雪山飞猪
原文链接:使用 WP_Query 自定义 WordPress Loop
我爱水煮鱼版权所有,转载时必须以链接形式注明作者和原始出处及本声明。

17fav 收藏本文

PR: 2 / del.ici.ous: 2 / Technorati: 1

16 条评论 添加你的评论

  • 1. Kusanagi  |  April 13th, 2008 at 10:27 pm

    看完了,一点也不懂,沙一个发先. :mrgreen:

    [回复该留言]

  • 2. 胖逗逗  |  April 13th, 2008 at 10:37 pm

    和楼上一样,一点没看懂

    [回复该留言]

  • 3. li  |  April 13th, 2008 at 11:07 pm

    老鱼,WordPress Related Posts插件能专门显示某一分类下的相关文章吗?你的功能里面有不显示某一分类的设置,不知道能不能使用函数来专门 调某一单独分类下的相关文章

    [回复该留言]

    雪山飞猪 reply on April 13, 2008:

    需要修改源程序。

    [回复该留言]

  • 4. Qianli  |  April 13th, 2008 at 11:28 pm

    请教一下,使用wp_query、query_posts函数与使用foreach+get_posts相比哪个更好?我以前也常用wp_query,但现在基本都用foreach+get_posts了,感觉更灵活一些

    [回复该留言]

    雪山飞猪 reply on April 13, 2008:

    没有更好,只是自己使用习惯的问题。

    [回复该留言]

  • 5. KimCool  |  April 14th, 2008 at 12:25 am

    :evil: 没看懂是好事.^_^

    [回复该留言]

  • 6. askie  |  April 14th, 2008 at 12:29 am

    比较深入的研究了!支持!

    [回复该留言]

  • 7. may  |  April 14th, 2008 at 9:20 am

    看不懂
    纯支持
    :mrgreen:

    [回复该留言]

  • 8. tomdbtel  |  April 14th, 2008 at 9:25 am

    呵呵,好方法。 :razz:

    [回复该留言]

  • 9. zEUS.  |  April 14th, 2008 at 1:28 pm

    好文章,多谢分享!

    [回复该留言]

  • 10. MO  |  April 14th, 2008 at 2:10 pm

    一直在用这些,就是没有深入研究…收藏下来,慢慢琢磨下…

    [回复该留言]

  • 11. Andor  |  April 14th, 2008 at 9:41 pm

    还是习惯使用 query_posts()

    [回复该留言]

  • 12. 浪的狼  |  May 8th, 2008 at 4:46 pm

    “$recentPosts = new WP_Query();
    $recentPosts->query(’showposts=5′);”
    这应该是创建了一个对象吧,不是变量吧.一个类的实例化 :?:

    [回复该留言]

  • 13. 浪的狼  |  May 8th, 2008 at 4:46 pm

    “$recentPosts = new WP_Query();
    $recentPosts->query(’showposts=5′);”
    这应该是创建了一个对象吧,不是变量吧.是一个类的实例化
    :neutral:

    [回复该留言]

  • 14. 浪的狼  |  May 8th, 2008 at 4:48 pm

    哦,忘了,PHP越学越晕了,变量包括对象 :mrgreen: :mrgreen: 惭愧惭愧

    [回复该留言]

发表评论

必须

必填,打死不公开

:mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

Honey Piggy Spring 代码墙


WooThemes - Premium WordPress Themes Club

订阅

本站推荐

正在更新

分类

Clicki