当前位置:首页>WordPress建站>WordPress开发>掌握 WP_Query : 入门介绍

掌握 WP_Query : 入门介绍

WordPress 主题 CoreNext

通常来说,Wordpress会在你所有展现的网页上运行query(查询)功能,查询不同的属性决定了你所看到页面。因此,如果你正在查看一个静态页面,WordPress的运行查询相关ID来显示页面,而如果归档页面被浏览,查询将检索该归档的所有文章。

但有,有的时候我们需要定制内容。这可能是你的文章内容部分或其他页面上的部分(如:侧边栏或页脚),显示一些特定的内容,而不是WP默认查询输出。

有了WP_Query类,这一切都好办了。WP_Query类提供了大量的参数,你可以去设置这些参数来决定什么样的内容将被展示出来(这不仅仅局限于文章页面)。然后,它会运行一个循环函数,来循环展示你所想要展示的内容。

《掌握WP_Query》本系列的学习,共19篇博文。完成本系列的学习,你会从基础入门到精通WP_Query,学会在各种场景下使用WP_Query,轻松使用其完成对Wordpress网站的数据库数据检索/修正功能。

在此文我们将介绍以下内容:

  • 什么是WP_Query?
  • 为什么要使用WP_Query?
  • 潜在的问题/有什么要注意的。

什么是WP_Query?

WP_Query是由WordPress提供的一个类。通过WP_Query,你可以轻松的使用已经集成到WordPress核心代码中的变量、判断和功能,而不必担心自己编写所有的代码。这使你的代码更高效,更可靠。

如果你是个处女座,想知道WP_Query干了嘛,你可以在includes/query.php中看到它的原码。(么担心啦,无病毒啦~~~全世界那么多同志在使用,嘻嘻)

WP_Query包括四个部分:

  • 需要查询的参数,或者参数集合。
  • 开始查询。
  • 循环输出——这将输出文章内容、标题或任何你想显示的内容。
  • 查询结束——通过标签判断、重置请求数据。

下面我们来举个例子:

<?php
 
$args = array(
    // 用于查询的参数或者参数集合
);
 
// 自定义查询
$query = new WP_Query( $args );
 
// 判断查询的结果
if ( $query->have_posts() ) {
 
    // 通过查询的结果,开始主循环
    while ( $query->have_posts() ) {
 
        $query->the_post();
 
        // Contents of the queried post results go here.
 
    }
 
}
 
// 重置请求数据
wp_reset_postdata();
 
?>

你可以在查询的时候去定义需要查询的参数,但是我们不建议这样,我们建议:在查询之前准备好需要查询的参数。保持代码的简洁、易读。

重置请求数据

在例子程序中,我们在每次查询之后添加了wp_reset_postdata()函数,它可以把本次查询的结果传递到页面上主查询中去。

例如,如果你使用WP_Query去展现一组查询数据到侧边栏里,使用wp_reset_postdata()去告诉WordPress哪个页面是我们刚刚访问的页面,并且传递参数至页面的主查询。

如果你不这样做,其他任何页面上运行的查询(包括默认查询)都可能会中止,任何判断页面类型的条件标签都不会正常工作。

为什么要使用WP_Query?

如果你没有使用过WP_Query类,你可能会想为什么要学习它。这里我们将从两个方面进行回答:为什么使用WP_Query 而不使用其他自定义的查询方法;哪些地方你可能会想到用WP_Query。

为什么使用WP_Query 而不使用其他自定义的查询方法?

WP_Query不是仅有自定义查询方法。还有以下四种:

  • pre_get_posts
  • get_posts()
  • get_pages()
  • query_posts() (不推荐)

以上的方法我们不过多的介绍,但是你有时间去了解一下,也是很有用处的。

  • pre_get_post 是一个修改主查询的hook(挂钩)。通过条件标签去判断是否有一个确切类型的页面已经展示了出来(如:主页),然后使用pre_get_post去修改查询(如:删除在某个地方展示的最近的3篇博文)。这是非常高效的方式去修改主查询,也是首先应该想到的。但是,不能使用它去创建一个新的查询。
  • get_posts()get_pages()  除了名字不同,功能类似。这些模板类拓展了WP_Query类,用不同的方式做了同一件事件,当你在调用WP_Query类之前,额外的插入了一步,而非直接插入到wp_query中去。当且仅当查询文章与页面的时候使用get_post和get_paget(),而强大的wp_query,可以包含数据库所有的查询情况。
  • query_posts() 可以修改主查询(不能在插件和主题中使用)。Query_post()会跳出主查询并重新开始,把主查询给替换掉。很容易报错,特别是标记页码的时候,它会很低效并且使页面加载时间变长。如果需要修改主查询,使用pre_get_post吧。如果你是想重新新建一个查询,请使用wp_query。

在下图中,Andrey “Rarst” Savchenko 将这几个函数做了一个功能演示:

2016-02-04_115715_wpdaxue_com

 

什么时候你可能需要用到WP_Query?

有很多种情况下,使用WP_Query会很有效率。下面尽可能多给大家展示:

  • 在当前文章的后面添加一个相关文章的列表——例如:添加一个相关分类的所有文章的列表。
  • 在同一页面新建2个循环,例如:在FAQ页面,设置在问题标题处和内容的下面。
  • 当小工具(近期文章)显示不出你所需要的内容(或者你是大牛,自己来写的除外^_^),那就用WP_Query来新建一个自定义近期文章列表,放到侧边栏或者网站页脚。
  • 创建分类自定义查询,使用多个分类区分要显示的内容。
  • 查询文章类型不能够由默认查询而输出的,如:附件生成
  • 由很多种查询生成自定义的内容多样的页面,正如示例程序

注意事项

WP_Query很强大,但是它也有缺点:

  • 如果是为了改变文章显示成为特点的类型或者分类,不要用WP_Query。而是,简单的为新的内容或者分类新建一个模板文件,在这个模板文件中设置主循环。
  • 如果是在一个归档中展示一小部分文章(例如:不展示特定的分类文章),不要用wp_query去生成一个总的查询。而是用pre_get_posts去修改主查询,利用一些条件标签去定位出你想要修改的内容。
  • 一定要警惕在页面上使用过多的查询。理论上,可以在一个页面上使用成百上千个查询,但是请考虑一下你的服务器的负载吧。如果说某个页面需要4到5个查询工作,那么就考虑做一个新的页面模板吧。

小结

WP_Query类是一个强大的丰富的工具,它可以让你自定义页面上的查询,使你的Wordpress网站展现成你所需要的内容。同样,我们也可以使用其他的查询方法,如文章中所介绍的。

在该系列的剩余部分,我们将介绍如何使用wp_query,并且熟悉掌握它。

原文出自:http://code.tutsplus.com/tutorials/mastering-wp_query-an-introduction–cms-23023

痴空见观@WordPress大学 原创翻译,未经允许,禁止转载和采用本译文。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
欢迎关注WordPress大学公众号 WPDAXUE
WordPress开发

50个WordPress过滤钩子(总结)

2016-1-21 10:47:13

WordPress开发

掌握 WP_Query:教你使用Loop循环

2016-2-23 17:23:52

3 条回复 A文章作者 M管理员
  1. jiage

    还是看国人的教程看着舒服,看着还夹杂着生硬翻译的译文,着实有点恼火。但还是非常感谢WordPress大学了,为我们提供了非常好的学习平台!

    • 倡萌

      多谢支持,老实说,做翻译是很枯燥的事情,我也是付小费让网友们帮忙的,免不了有些地方翻译生硬,如果兄弟外语可以,欢迎加入我们的行列

    • jiage

      额,胡哥(胡歌?哈哈)回复的还挺快。其实发表评论的时候,我还以为这个主题教程是国人写的,没想到最后看到底部才知道是译文。这位kanlidy站长的水平还真是厉害。小弟的英语水平超级差,就不献丑了,哈哈。

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索