掌握WP_Query:简介

默认情况下,WordPress会在您的网站显示的每个页面上运行查询,查询的性质将取决于所查看页面的类型。 因此,如果正在查看静态页面,则WordPress将运行查询以显示具有相关ID的页面,而如果正在查看存档页面,则查询将检索该存档中的所有帖子。

但是有时您想要做的事情有些不同。 在页面的主要内容中或页面其他地方(例如,侧边栏或页脚中),您可能希望显示一些标准查询未输出的特定内容。

好消息是WordPress通过WP_Query类使之成为可能。 此类为您提供了大量参数,您可以使用这些参数来定义要输出的内容(不必限于帖子),然后编写一个循环以完全显示所需的内容。

在这个由WP_Query组成的19部分系列中, Baris Unver和我将带您了解WP_Query来龙去脉,以便在完成该系列后,可以在各种场景中进行使用并进行微调。 WordPress查询站点数据库中数据的方式。

在本简介中,我将介绍以下内容:

  • 什么是WP_Query
  • 为什么要使用WP_Query
  • 潜在问题/需要注意的地方。

什么是WP_Query?

WP_Query是WordPress提供的类。 它是一类的事实意味着,通过使用它,您可以快速访问已在WordPress核心中编码到该类中的变量,检查和函数,而不必担心自己编写所有代码。 这使您的代码更加有效和可靠。

如果您想确切了解WP_Query工作原理,则可以在includes/query.php文件中查看其代码。

WP_Query包含四个主要元素:

  • 查询的参数,使用将在本系列中详细介绍的参数
  • 查询本身
  • 循环,将输出帖子内容,标题或您要显示的任何内容
  • 完成:关闭if和while标签并重置发布数据

实际上,这将类似于以下内容:

<?php

$args = array(
    // Arguments for your query.
);

// Custom query.
$query = new WP_Query( $args );

// Check that we have query results.
if ( $query->have_posts() ) {

    // Start looping over the query results.
    while ( $query->have_posts() ) {

        $query->the_post();

        // Contents of the queried post results go here.

    }

}

// Restore original post data.
wp_reset_postdata();

?>

您可以在编写查询本身时定义参数,但是我更喜欢先定义参数,因为这样可以使事情保持整洁。

重置过帐数据

在上面的示例中,我在每个查询之后添加了wp_reset_postdata() 。 这很重要,因为它将查询重置为该页面上正在运行的主查询。

例如,如果您使用WP_Query在边栏中运行查询,则使用wp_reset_postdata()有效地告诉WordPress,我们仍在查看任何页面上,并且该页面应与该页面的默认查询一起使用。

如果不执行此操作,则该页面上正在运行的任何其他查询(包括默认查询)可能会中断,并且任何检查正在查看哪种页面的条件标签都将不起作用。

为什么要使用WP_Query?

如果您以前没有使用过WP_Query类,那么您可能想知道为什么应该开始。 在这里,我将集中讨论这两个方面:为什么WP_Query在其他编写自定义查询的方法上使用WP_Query ,以及可能要使用WP_Query

为什么在其他方法上使用WP_Query?

WP_Query不是创建自定义查询的唯一方法。 还有四个:

  • pre_get_posts
  • get_posts()
  • get_pages()
  • query_posts() (我会解释,应避免使用)

关于这些功能的工作方式,我将不做详细介绍,但是了解何时使用它们会有所帮助:

  • pre_get_posts是用于修改主查询的钩子。 您可以将其与条件标记一起使用,以检查是否正在查看某种类型的页面(例如主页),然后使用它来修改正在运行的查询(例如,删除最新的三个帖子,如果您在页面其他位置重新显示它们)。 这是修改主查询的一种非常有效的方法,如果您要这样做,则它应该是您的第一个调用端口。 但是,您不能使用它来创建一个全新的查询。
  • get_posts()get_pages()非常相似,主要区别在于它们的名称。 这些模板标记实际上使用WP_Query类,因此它们是做同一件事的另一种方法,但是增加了一个额外的步骤,因为它们调用WP_Query类而不是直接执行。 您只能使用它们来查询帖子或页面,而WP_Query本身更强大,可以查询数据库中几乎所有内容。
  • query_posts()修改主查询,但不应在插件或主题中使用。 这是因为它将抛出主查询并重新开始,用新查询替换主查询。 它还容易出错,尤其是分页时,效率很低,并且会影响您的页面加载时间。 如果需要修改主查询,请改用pre_get_posts ;如果要创建一个全新的查询,请使用WP_Query

下图由Andrey“ Rarst” Savchenko在Creative Commons许可下发布,具有以下含义:

理解WP_Query函数

当您可能使用WP_Query时

在很多情况下, WP_Query会很有用,而我在这里无法全部介绍,但这里有一个概述:

  • 在当前帖子下添加相关帖子的列表,例如,同一类别中所有帖子的列表。
  • 在同一页面上创建两个循环:例如,一个FAQ页面 ,其问题标题位于顶部,其内容位于下方。
  • 要在网站的侧边栏或页脚中创建最近发布的自定义列表,当“最近发布”窗口小部件无法满足您的需要时(或者您宁愿自己编写代码)。
  • 为分类法创建自定义查询 ,请使用多个分类法来定义要显示的内容。
  • 查询默认查询未输出的帖子类型,例如附件
  • 像在此示例站点中为客户端所做的那样,使用大量针对不同内容类型的查询来创建自定义页面。

一些警告

WP_Query类很棒。 我创建了许多需要自定义查询的网站,因此我经常使用它。 但这并非没有缺点。 您应该注意以下几点:

  • 如果您要做的只是更改特定内容类型或档案的帖子显示方式,请不要使用WP_Query 。 相反,只需为该存档或内容类型创建一个模板文件,然后在该模板文件中修改循环即可。
  • 如果您要显示的帖子数比通常在存档页面上显示的帖子多或少(例如,不显示特定类别),请不要使用WP_Query创建一个全新的查询。 而是使用pre_get_posts修改主查询以及条件标记,以选择要执行的位置。
  • 当心在页面上运行太多查询。 从理论上讲,您可以创建包含数百个自定义查询的页面,但只需考虑服务器负载。 如果一个页面上需要四个或五个以上的查询,则可能需要考虑创建额外的页面。

摘要

WP_Query类是一个功能强大且极其有用的工具,用于创建自定义查询并使WordPress网站的行为完全符合您的期望。 如我们所见,有时您会使用其他方法来创建自定义查询,但是它的用途广泛。

在本系列的其余部分中,我们将带您详细了解如何使用WP_Query并从中获得最大WP_Query

翻译自: https://code.tutsplus.com/tutorials/mastering-wp_query-an-introduction--cms-23023

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值