WordPress文章查询标签:query_posts

背字根

WordPress模板标签query_posts用来限定The Loop循环的查询条件,query_posts()函数可以产生一个新的查询SQL的参数,而忽略URL接收的参数。如果不希望忽略,例如搜索结果页,那么可以在调用中使用$query_string。

query_posts()函数仅用于修改主循环,而不是一种在页面上生成次级循环的手段。如果你希望在主循环外另外生成循环,应该新建独立的WP_Query对象,用这些对象生成循环。在主循环外的循环上使用query_posts()会导致主循环运行偏差,并可能在页面上显示出你不希望看到的内容。

query_posts($query)

函数参数

分类参数:

只显示特定分类下的文章。

  • cat :分类ID,如果是负数,则为不显示该分类文章;如果为正数,则只显示该分类文章。
  • category_name:分类名称
  • category__and:多个分类ID
  • category__in: 分类ID,只显示该分类文章,子分类的都不显示。
  • category__not_in :分类ID,不显示该分类的文章。

标签参数:

显示特定标签下的文章。

  • tag:标签ID,如果是负数,则为不显示该标签下文章;如果为正数,则只显示该标签下的文章。
  • tag_id:标签ID
  • tag__and:多个标签ID
  • tag__in:标签ID,只显示该标签下的文章。
  • tag__not_in:标签ID,不显示该标签下的文章。
  • tag_slug__and:多个标签别名
  • tag_slug__in:标签别名

作者参数:

你也可以根据作者来选择文章。

  • author:作者ID,如果是负数,则为不显示该作者下文章;如果为正数,则只显示该作者下的文章。
  • author_name:作者昵称

文章与页面参数:

检索单篇文章或页面。

  • p:根据文章ID显示文章
  • name:根据文章别名显示文章
  • page_id:页面ID
  • pagename:页面别名
  • posts_per_page:文章显示数量,-1为全部
  • showposts:指定多少个文章后开始翻页,不指定该参数则读取后台设置→阅读设置→博客页面至多显示
  • post__in:指定希望检索的文章ID
  • post__not_in:排除不希望检索的文章ID
  • post_type:页面类型,默认值为post;可用值包括any、attachment、page、post或revision。any可检索到除修订版外的所有页面类型。
  • post_status:可用值有publish、pending、draft、future、private、trash。最常用的是publish,用来限制私密文章。
  • post_parent:返回指定ID文章的子页面。

置顶文章参数:

置顶文章功能引入于WordPress 2.7版本。在查询中,被设为“置顶”的文章会显示在其它文章之前,除非该文章已经被caller_get_posts=1参数排除。

  • post__in:如果值为get_option('sticky_posts')时,则返回所有置顶文章的数组

返回第一篇置顶文章:

$args = array(
	'posts_per_page' => 1,
	'post__in' => get_option('sticky_posts'),
	'caller_get_posts' => 1
);
query_posts($args);

该方法返回最新发表的置顶文章,若当前无置顶文章,则返回最新发表的文章。

时间参数:

检索特定时间段内发表的文章。

  • hour:小时,范围从0到23
  • minute:分钟,范围从0到60
  • second:秒,范围从0到60
  • day:日,范围从1到31
  • monthnum:月,范围从1到12
  • year:年,如2012
  • w:一年中的第几周,范围从0到53

offset(偏移)参数:

排除Loop循环中出现的第一篇文章,以下代码显示最近一篇文章之后的5篇文章:

query_posts('posts_per_page=5&offset=1');

排序参数:

orderby可用的值:

  • author:按作者排序
  • date:按日期排序
  • title:按名称排序
  • modified:按修改时间排序
  • ID:按ID排序
  • rand:随机排序
  • comment_count:按评论数排序

order可用的值:

  • ASC:升序,从最低值到最高值
  • DESC:降序,从最高值到最低值

自定义字段参数:

根据自定义关键字或值检索文章(或页面)。

  • meta_key=字段名称
  • meta_value=字段值
  • meta_compare=用以测试meta_value=的操作符,默认值为“=”,其它可用的值包括“!=”、“>”、“>=”、“<”或“<=”

返回关键字为“color”且值为“blue”的文章:

query_posts('meta_key=color&meta_value=blue');

返回自定义字段关键字为“color”的文章,无论自定义字段值为何:

query_posts('meta_key=color');

返回自定义字段值为“color”的文章,无论关键字为何:

query_posts('meta_value=color');

返回自定义字段值为“green”的页面,无论自定义字段关键字为何:

query_posts('post_type=page&meta_value=green');

返回自定义关键字为“color”、自定义字段值不为“blue”的文章和页面:

query_posts('post_type=any&meta_key=color&meta_compare=!=&meta_value=blue');

返回自定义字段关键字为“miles”、自定义字段值小于等于22的文章。注意,字段值99会被看做大于字段值100,因为数据是以字符串形式而不是数字形式存储的。

query_posts('meta_key=miles&meta_compare=<=&meta_value=22');

函数使用示例

在Loop循环之前插入以下代码:

$args = array(
	'category__in' => 2,
);
query_posts($args);

$args数组中可以根据自己的需要指定任意数量的参数。

如果需要分页功能,在数组之前加入代码:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

使用query_posts()函数,一定要在循环结束时使用wp_reset_postdata()函数来重置query。

扩展阅读

query_posts()函数位于:wp-includes/query.php

相关函数:

  • WP_Query()
个赞
扫码关注背字根

一个热爱Web开发的大男孩