WordPress输出文章最常见的函数是query_posts(),但query_posts()不是唯一的方式,而且乱用query_posts()不是一个好习惯。get_posts()或者WP_Query也可以达到相同的作用。看了一篇文章,描述了这三者的区别。

query_posts()

query_posts()主要用来输出主循环,并且会创建很多全局变量。因此不适合到处使用,最佳使用场所就是输出主循环,别的地方能不用就不要用。如果一定要用,记得在输出结果以后使用wp_reset_query()函数重置查询结果,防止意外修改主循环和全局变量产生一堆莫名其妙的错误。

get_posts()

get_posts()的机制与query_posts()类似,参数也相同,是一种简单的获取文章的方法,get_posts()不会产生全局变量,不影响主循环,非常安全。如果要在主循环之外输出最新文章、特色文章等,不妨考虑用这个。

//get_posts参数
<?php 
$args = array(
 'numberposts'  => 5,
 'offset'    => 0,
 'category'  => ,
 'orderby'   => 'post_date',
 'order'     => 'DESC',
 'include'   => ,
 'exclude'   => ,
 'meta_key'  => ,
 'meta_value'   => ,
 'post_type'    => 'post',
 'post_mime_type'  => ,
 'post_parent'  => ,
 'post_status'  => 'publish' ); ?>

WP_Query

WP_Query是前两个函数的基础,使用起来更复杂,但限制也少。适合创建功能比较特殊的自定义循环,也完全可以取代上面两个函数。

关于上述三者的区别,在WordPress Answers网站有很好的讨论,感兴趣的不妨看一下,对于WordPress的数据库交互机制,Sola还有很多不明白的地方,还要努力研究一下。但query_posts()绝对不是一个想用就能用的功能,乱用这个函数可能产生严重的错误。

http://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts

关于WordPres Answers

在此严重推荐一下WordPress Answers这个网站,是Stack Overflow的姊妹站,只要你的问题是关于WordPress的,就会有一群认真的人给出负责的答案,灌水、或者偷懒问一些已经回答过的问题,都会被close。在国内很难找到这样干净专业的地方啊,如果能看懂英文,还是到这里混吧。

10条留言

  1. […] WordPress Answers这个网站Sola在上一篇文章《WP_Query、query_posts() 和 get_posts()应该在什么时候使用》中提到过,我忘记是什么时候发现了这个宝地,似乎突然间搜索很多WordPress问题,都能搜到这个网站上。于是用WordPress Answers的RSS替代了WordPress后台的官方博客订阅,每天看看有什么有趣的问题。话说,WordPress中文论坛上的问题,我自认为没有回答不了的。但WordPress Answers上的问题,似乎没有多少是我能回答的。 […]

  2. 你好,我找了半天没有找到留言页面,于是在这里想请教博主一个问题,贵站右下角的弹出推荐是如何实现的呢。求指导

    1. 你好,页面底部用插件实现的,叫做upPrev,其实就是翻页功能,http://wordpress.org/extend/plugins/upprev/

      1. 多谢。我也去试试。博主的相关文章插件又是用的哪个吖。貌似不是无觅的样子。

      2. 这个插件的Related Posts (YARPP)要怎么设置吖

        1. 设置->关联文章(YARPP)页面,点击屏幕右上角的显示选项,勾选所有的checkbox调出高级设置,在关联设置里有一项叫匹配值,把匹配值设置的低一点,比如设成1就可以,匹配值太高可能出现无相关文章的结果。其它的用默认设置就行了。
          在显示设置里勾选自动插入关联文章,相关文章就会自动显示在文章后面。
          也提供了相关文章的widget,可以放在侧栏里

          1. 关联联文章(YARPP)页面?纠结了,好像没有找到。纠结了。。。
            我这边只有Apperance、Content、Links、Cache、Mobile devices这几个。。。

        2. 怎么菜单那么少,没有settings菜单吗?难道你在用wordpress.com或者类似的blog提供商?

评论功能已关闭