WP_Query的作用
WP_Query是wp-includes/query.php文件中定义的类,该类负责处理对WordPress博客的请求。wp-blog-header.php文件(或WordPress 2.0版本后的WP类)给出定义了当前请求的$wp_query对象的信息,之后$wp_query确定自己所处理的请求类型(分类存档?基于日期的存档?feed?搜索?)并获取所请求的文章。WP_Query在请求上存留了大量信息以供日后使用。
使用方法和属性
你不可以直接更改WP_Query的属性,只能通过方法(method)来与属性相互配合。通过下文中的与WP_Query相互作用,可以找到一些有用的函数来避免混淆内部类和全局变量。
属性
$query
保留wp-blog-header.php(或WordPress 2.0版本后的WP类)传递给$wp_query对象的查询字符串。
$query_vars
这是一个关联数组,该数组包含分裂的 $query:(一个由查询变量及其相应的值组成的数组)
$queried_object
适用于请求分类索引、作者索引、固定链接索引或是页面索引。保留所请求的分类、作者、文章或页面信息。
$queried_object_id
仅保留上一个属性($queried_object)的ID。
$posts
用数据库中查询到的文章填充该属性
$post_count
当前显示的文章总数。
$current_post
(用于主循环中)当前显示的文章索引
$post
(用于主循环中)当先显示的文章
- $is_single, $is_page, $is_archive, $is_preview, $is_date, $is_year, $is_month, $is_time, $is_author, $is_category, $is_tag, $is_tax, $is_search, $is_feed, $is_comment_feed, $is_trackback, $is_home, $is_404, $is_comments_popup, $is_admin, $is_attachment, $is_singular, $is_robots, $is_posts_page, $is_paged
布尔变量判断请求类型。例如,对上面列出的这些参数,前三个分别表示“这是不是一个固定链接”、“这是不是一个页面?”以及“这是不是存档索引?”。
方法
方法名前有&符号,表示该方法返回引用。
init()
初始化对象,将所有属性归为null、0或false
parse_query($query)
获取定义请求的查询字符串,解析字符串并填上除$posts, $post_count, $post以及 $current_post之外的所有属性。
parse_query_vars()
重新解析原有的查询字符串
get ($query_var)
获取一个已命名的查询变量。
set ($query_var, $value)
将一个已命名的查询变量赋值给某个指定值
$get_posts()
从数据库中获取并返回请求的文章。填入 $posts 与$post_count.的值。
next_post()
(将用于主循环中)预先进入$post的下一篇文章。为$current_post增值,设置$post的值。
the_post()
(将用于主循环中)预先进入下一篇文章,设置全局变量$post的值。
have_posts()
rewind_posts()
重设$current_post以及$post的值。
$query($query)
调用parse_query() 与get_posts()。返回get_posts()的结果。
get_queried_object()
设置并返回$queried_object的值(若$queried_object的值尚未设置)
get_queried_object_id()
设置并返回$queried_object_id的值(若$queried_object_id的值尚未设置)
WP_Query ($query = '')(构造器)
如果你提供了一个查询字符串,用该方法调用query()。
与WP_Query相互作用
大多数时候不借助内部类和全局变量就可以找到自己需要的信息。WordPress中有众多函数,你可以从各个地方调用这些函数来获取自己需要的信息。
在两种情况下可能会用到WP_Query。第一种情况是,找到WordPress目前正处理的请求类型。$is_* 属性正是为获取这类信息而设:通过条件标签相互作用。这种情况常见于插件开发者(第二种情况则更适用于主题开发者)。
第二种情况是在主循环中。WP_Query为主循环中的日常操作y提供了大量函数。首先,调用have_posts(have_posts调用 $wp_query->have_posts())来查看是否有需要显示的文章。如果有,以have_posts为条件,开始执行while循环。只要有需要显示的文章,循环就会一直执行下去。在每个循环中,the_post()先调用$wp_query->the_post(),然后在$wp_query中调用the_posts()来设置内部变量以及全局变量$post(模板标签的基础)。以上就是你在编写带有主循环的主题文件时应该用到的函数。更多信息请参见WordPress主循环(loop)以及运行中的The Loop(主循环)。
分类:中文手册