制作wordpress主题的时候经常会用到query_posts(),通过它可以实现各种特殊的要求,如获得特定的文章日志、排除某一分类等。query_posts()函数的作用是在主循环Loop中限制所需要的条件,wp_query会根据参数进行SQL查询,而忽视通过URL接收到的其它的参数,当然如果想不忽略,可以在调用中使用$query_string。 如:
query_posts()函数参数:
显示属于某个类别的文章
只显示来自一个类别ID的文章
query_posts(‘cat=4’);
只显示属于某个类别名的文章
query_posts(‘category_name=Staff Home’);
显示所有的文章,但是类别ID前面有个’-’(负号)负号的类被除外。
query_posts(‘cat=-3’);
标签参数
显示与某个标签相关的文章
tag
为某个标签提取文章
query_posts(‘tag=cooking’);
获得拥有任何这样的标签的文章
query_posts(‘tag=bread,baking’);
获取拥有这三个标签的文章
query_posts(‘tag=bread+baking+recipe’);
作者参数
你也可以根据作者限制文章数目
author_name在 user_nicename区操作, 同时作者 在作者id上操作。
文章 & 网页参数
返回一篇单独的文章或者一个单独的网页
由于 模板层级方面的原因, home.php先执行了。这意味这你可以编写一个home.php,home.phh调用query_posts()重新得到一个特别的网页并且将那个 网页设置为你的首页。没有任何插件或者hacks,你需要运行一个机制,并且显示和维护一个非博客的首页。
更有用的方法,可能是利用WP的网页功能并且为你的首页使用这个功能。你可以将”关于网页”设置为entry point或者设置为站点的末页。你可能执行一些更动态的步骤,设置一个自定义网页,显示最近的评论,文章,类别,存档。请看看下面的例子。
时间参数
得到某个特别的时间段内发表的文章
网页参数
Offset 参数
你不能转移或者忽视一个或者更多的原始文章,这些文章一般是你的query同时使用offset参数收集到的。
下面的函数会显示(1)最近的5篇文章
query_posts(‘showposts=5&offset=1’);
根据参数排序
根据这个区给得到的文章排序
同时考虑”ASC”或者的”DESC”的排序参数
联合参数
你可能从上面的例子中注意到,你使用一个&(&符号)将参数组合在一起,像:
query_posts(‘cat=3&year=2004’);
类别13:关于当前月份显示在主页上的文章:
1 2 3 | if (is_home()) { query_posts ($query_string . '&cat=13&monthnum=' . date('n',current_time('timestamp'))); } |
在2.3版本中,这个参数组合会返回属于类别1同时属于类别3的文章,只显示两篇(2)文章,根据标题,按降序排列:
1 | query_posts(array('category__and'=>array(1,3),'showposts'=>2,'orderby'=>title,'order'=>DESC)); |
在2.3和2.5版本中,你可能期待下面的内容,返回属于类别1并且标签为”苹果”的所有文章
1 | query_posts('cat=1&tag=apples'); |
一个bug阻止这个运行。请看看Ticket #5433,一个工作区要搜索几个使用+的标签
1 | query_posts('cat=1&tag=apples+apples'); |
对于先前的查询,这个会产生期待的结果。注意使用’cat=1&tag=apples+oranges’能够产生期待的结果。
提醒:使用该函数后,要以wp_reset_query()结束,wp_reset_query()说明请看wordpress主题制作wp_reset_query函数说明