常用函数-wp_query()

3条评论

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(主循环)