WP_Query

可供使用的查询参数:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

 public 'query_vars' => 
    array (size=62)
      'post_type' => string 'post' (length=4)
      'post_status' => string 'publish' (length=7)
      'posts_per_page' => int 10
      'error' => string '' (length=0)
      'm' => string '' (length=0)
      'p' => int 0
      'post_parent' => string '' (length=0)
      'subpost' => string '' (length=0)
      'subpost_id' => string '' (length=0)
      'attachment' => string '' (length=0)
      'attachment_id' => int 0
      'name' => string '' (length=0)
      'static' => string '' (length=0)
      'pagename' => string '' (length=0)
      'page_id' => int 0
      'second' => string '' (length=0)
      'minute' => string '' (length=0)
      'hour' => string '' (length=0)
      'day' => int 0
      'monthnum' => int 0
      'year' => int 0
      'w' => int 0
      'category_name' => string '' (length=0)
      'tag' => string '' (length=0)
      'cat' => string '' (length=0)
      'tag_id' => string '' (length=0)
      'author' => string '' (length=0)
      'author_name' => string '' (length=0)
      'feed' => string '' (length=0)
      'tb' => string '' (length=0)
      'paged' => int 0
      'comments_popup' => string '' (length=0)
      'meta_key' => string '' (length=0)
      'meta_value' => string '' (length=0)
      'preview' => string '' (length=0)
      's' => string '' (length=0)
      'sentence' => string '' (length=0)
      'fields' => string '' (length=0)
      'menu_order' => string '' (length=0)
'category__in' => 
        array (size=0)
          empty
      'category__not_in' => 
        array (size=0)
          empty
      'category__and' => 
        array (size=0)
          empty
      'post__in' => 
        array (size=0)
          empty
      'post__not_in' => 
        array (size=0)
          empty
      'tag__in' => 
        array (size=0)
          empty
      'tag__not_in' => 
        array (size=0)
          empty
      'tag__and' => 
        array (size=0)
          empty
      'tag_slug__in' => 
        array (size=0)
          empty
      'tag_slug__and' => 
        array (size=0)
          empty
      'post_parent__in' => 
        array (size=0)
          empty
      'post_parent__not_in' => 
        array (size=0)
          empty
      'author__in' => 
        array (size=0)
          empty
      'author__not_in' => 
        array (size=0)
          empty
      'ignore_sticky_posts' => boolean false
      'suppress_filters' => boolean false
      'cache_results' => boolean true
      'update_post_term_cache' => boolean true
      'update_post_meta_cache' => boolean true
      'nopaging' => boolean false
      'comments_per_page' => string '50' (length=2)
      'no_found_rows' => boolean false
      'order' => string 'DESC' (length=4)

[/pcsh]

用WP_Query类查询出的文章都存放在posts对象中

WP_Query 类是 WordPress 文章查询的核心,它的文章查询部分提供了很多可用参数,经过好几个版本的升级完善,让它越来越强大,本文就可以让你详细的了解所有查询参数和技巧。

作者

查询和某些作者(用户)有关的文章,可以使用 4 个参数:

  • author(整数):用户 ID
  • author_name(字符串):用户的昵称(“user_nicename” 字段)
  • author__in(数组):用户 ID
  • author__not_in(数组):用户 ID

获取一个作者的文章

根据用户 ID 获取:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'author=123' );

[/pcsh]

分类

关于分类有 5 个可用的参数:

  • cat(整数):分类 ID
  • category_name(字符串):分类别名
  • category__and(数组):分类 ID
  • category__in(数组):分类 ID
  • category__not_in(数组):分类 ID

获取一个分类的文章

根据分类的 ID 获取一个分类的文章(包含此分类的子分类):

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'cat=4' );

[/pcsh]

标签

获取关于标签的文章,可以使用 7 个参数:

  • tag(字符串):标签别名
  • tag_id(整数):标签 ID
  • tag__end(数组):一些标签 ID
  • tag__in(数组):一些标签 ID
  • tag_slug__and(数组):一些标签别名
  • tag_slug__in(数组):一些标签别名

获取一个标签的文章

根据标签别名获取有这个标签的文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'tag=cooking' );

[/pcsh]

自定义分类法

有关自定义分类法(Taxonomy)的查询可以使用 1 个参数:

  • tax_query(数组):分类法查询参数
    • relation(字符串):条件的逻辑关系,OR(或者)或 AND(和)
    • taxonomy(字符串):分类法名称
    • field(字符串):根据分类法条款的什么字段查询,可选 term_id(分类条款 ID)、name(名称)和 slug(别名),默认是 term_id
    • terms(整数 | 字符串 | 分类):分类法条款
    • include_children(布尔):是否包含子分类法条款,默认是 True
    • operator(字符串):匹配运算符(IN、IN NOT 和 AND),默认是 IN

简单的分类法查询

获取 people 分类法里别名为 bob 的条款下的文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'people',
            'field'    => 'slug',
            'terms'    => 'bob',
        ),
    ),
);
$query = new WP_Query( $args );

[/pcsh]

文章和页面

根据文章信息获取文章。请记住,默认情况下,post_type 一般都是 post(文章)。 有 9 个参数可以使用:

  • p(整数):文章 ID
  • name(字符串):文章别名
  • page_id(整数):页面 ID
  • postname(字符串):页面别名
  • post_parent(整数):如果填写 ID 则只返回它的子项目,如果填 0 则只返回顶级项目
  • post_parent__in(数组):一些父级项目的 ID,获取它们的子项目
  • post_parent__not_in(数组):一些父级项目的 ID,排除它们的子项目
  • post__in(数组):一些文章 ID
  • post__not_in(数组):一些文章 ID

根据 ID 获取文章或页面

根据 ID 获取文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'p=7' );

[/pcsh]

密码

有关文章密码的查询,可以使用 2 个参数:

  • has_password(布尔):文章是否有密码
  • post_password(字符串):指定的文章密码

有无密码

获取有密码的文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( array( 'has_password' => true ) );

[/pcsh]

类型

有关文章类型的查询,只有一个参数可以使用:

  • post_type(字符串 | 数组):文章的类型,一般默认都是 post(文章)

一个文章类型

获取页面:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'post_type=page' );

[/pcsh]

状态

有关文章状态的查询。文章状态指的是文章当前处于什么情况,比如 “已发布”、“草稿”、“待审核” 和 “定时发布” 等等,文章状态是可以由主题或者插件开发者扩展的。 关于文章状态可以使用一个参数:

  • post_status(字符串 | 数组):文章的状态,一般默认都是 publish(已发布)

获取一个状态的文章

获取草稿文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'post_status=draft' );

[/pcsh]

分页

有关分页的查询,有 7 个参数可以使用:

  • nopaging(布尔):将文章分页还是全部获取。默认是 False:分页
  • posts_per_page(整数):每页显示多少文章,如果设置成 –1 则不分页
  • posts_per_archive_page(整数):和 posts_per_page 是一样的,不过这个只有在当前查询是根据存档或是搜索的情况下才生效
  • offset(整数):偏移值,去掉前边几篇文章,再从后边找回来
  • paged(整数):页码,指定文章分页的当前页
  • page(整数):静态首页的页码
  • ignore_sticky_posts(布尔):是否忽略指定文章,要忽略置顶文章可以设置成 True,默认是 False

设置每页文章数

设置每页的文章数量为 3 篇文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'posts_per_page=3' );

[/pcsh]

排序和排序类型

有关文章排序方法和类型的查询,有两个参数可以使用:

  • order(字符串 | 数组):排序方法,ASC 为正序(从小到大);DESC 为倒序(从大到小)
  • orderby(字符串 | 数组):根据什么字段排序,默认是 post_date(文章日期)

按标题倒序

根据文章标题进行倒序排列:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );

[/pcsh]

日期

和文章日期有关的查询,有 9 个参数:

  • year(整数):4 位数的年份,比如 2014
  • monthnum(整数):月份,从 1 到 12
  • w(整数):周,从 0 到 53
  • day(整数):日,从 1 到 31
  • hour(整数):小时,从 0 到 23
  • minute(整数):分钟,从 0 到 60
  • second(整数):秒,从 0 到 60
  • m(整数):年月,比如 201409
  • date_query(数组):复杂的日期查询
    • year(整数):4 位数的年份,比如 2014
    • month(整数):月份,从 1 到 12
    • week(整数):周,从 0 到 53
    • day(整数):日,从 1 到 31
    • hour(整数):小时,从 0 到 23
    • minute(整数):分钟,从 0 到 59
    • second(整数):秒,从 0 到 59
    • before(字符串 | 数组):开启查询日期,可以是能被 strtotime() 函数解析的日期字符串,还可以使用数组:
      • year(整数):4 位数的年份,比如 2014,默认为空
      • month(整数):月份,从 1 到 12,默认是 1
      • day(整数):日,从 1 到 31,默认是 1
    • after(字符串 | 数组):结束查询日期,可以是能被 strtotime() 函数解析的日期字符串,还可以使用数组:
      • year(整数):4 位数的年份,比如 2014,默认为空
      • month(整数):月份,从 1 到 12,默认是 12
      • day(整数):日,从 1 到 31,默认是本月最后一天
    • inclusive(布尔):before 和 after 是否包含所指定本日的文章
    • compare(字符串):使用什么比较符号(=、!=、>、>=、<、<=、IN、NOT IN、BETWEEN、NOT、BETWEEN)
    • column(字符串):匹配的日期字段,默认是 post_date
    • relation(字符串):条件的逻辑关系,OR(或者)或 AND(和)

获取 2012 年 12 月 12 日的文章

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'year=2012&monthnum=12&day=12' );

[/pcsh]

自定义字段

有关自定义字段的查询,可用使用 9 个参数:

  • meta_key(字符串):自定义字段的名(key)
  • meta_value(字符串):自定义字段的值(value)
  • meta_value_num(数字):自定义字段的值(value)
  • meta_compare(字符串):匹配方法(=、!=、>、>=、<、<=),默认是 “=”
  • meta_query(数组):处理复杂的查询
    • relation(字符串):条件的逻辑关系,OR(或者)或 AND(和)
    • key(字符串):自定义字段的名(key)
    • value(字符串):自定义字段的值(value)
    • compare(字符串):匹配方法(=、!=、>、>=、<、<=、LIKE、NOT LIKE、IN、NOT IN、BETWEEN、NOT BETWEEN、EXISTS、NOT EXISTS),默认是 “=”
    • type(字符串):自定义字段的类型(NUMERIC、BINARY、CHAR、DATE、DATETIME、DECIMAL、SIGNED、TIME、UNSIGNED),默认是 “CHAR”

简单的自定义字段查询

获取拥有自定义字段 color 的文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( 'meta_key=color' );

[/pcsh]

用户权限

关于用户权限的文章查询有一个参数可以使用:

  • perm(字符串):用户权限

只有用户有权限才显示文章

只有用户有权限才获取已发布和私密的文章:

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( array( 'post_status' => array( 'publish', 'private' ), 'perm' => 'readable' ) );

[/pcsh]

文章缓存

有关文章数据的缓存,有 3 个参数:

  • cache_results(布尔):文章信息缓存
  • update_post_meta_cache(布尔):文章 meta 信息缓存
  • update_post_term_cache(布尔):文章分类法信息缓存

获取文章但不更新文章缓存

'posts_per_page' => -1

为每页显示所有文章

[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]

$query = new WP_Query( array( 'posts_per_page' => 50, 'cache_results' => false ) );

[/pcsh]

原文地址:http://www.endskin.com/wp_query-directions/

官方文档:https://codex.wordpress.org/Class_Reference/WP_Query

此处评论已关闭