标签: WP_Query

  • 使用WP_Query的基础知识 + 代码示例

    使用WP_Query的基础知识 + 代码示例

    默认情况下,WordPress会自动将您的文章从最新到最旧排序。尽管访问者可以使用类别和标签搜索特定文章,但他们可能无法找到他们正在寻找的内容。要为每位访问者整理您的文章,使用WP_Query会很有帮助。

    使用WP_Query,您可以自定义网站文章和页面的显示。这个PHP类使您能够简化复杂的数据库请求。作为开发人员或网站所有者,它可以帮助您自定义超出默认主题的页面。

    在这篇文章中,我们将解释什么是WP_Query。然后,我们将向您展示如何在您的WordPress网站上使用它。最后,我们将为您提供一些在您的博客上实现它的方法示例。

    WP_Query简介

    在WordPress中,您网站的数据存储在MySQL数据库中。这包括从文章、页面和评论到您的配置设置的所有内容。

    当访问者点击您的网站时,会向您的WordPress数据库发送一个请求。您的数据库检索特定的文章和页面以根据此查询显示它们。

    作为网站所有者,您可以利用查询从数据库中获取特定信息。尽管您可以构建SQL查询,但这并不是检索数据的最有效方式。这就是WP_Query的用武之地。

    WP_Query是一个PHP类,您可以使用它来为您的数据库构建查询。在WordPress中,这是一个内置类,每当有人搜索您的内容时就会出现。

    搜索文章列表

    但是,实施自定义WordPress查询可以使用户无需搜索即可找到特定内容。如果您需要在网站的前端呈现一组特定的文章,您可以使用WP_Query自定义文章类型轻松完成此操作。

    例如,您可能想要创建一个WordPress自定义文章类型。要显示这些文章,您可以编写特定查询。这是您可以使用的基本代码结构

    // WP QUERY
    $query = new WP_Query([
    ‘post_type’ => ‘press-release’
    “posts_per_page => 25,
    ‘category_name’ => ‘health’,
    ]);
    // WP QUERY
    $query = new WP_Query([
    ‘post_type’ => ‘press-release’
    “posts_per_page => 25,
    ‘category_name’ => ‘health’,
    ]);
    // WP QUERY
    $query = new WP_Query([
    'post_type' => 'press-release'
    "posts_per_page => 25,
    'category_name' => 'health',
    ]);

    这可以通过自定义Loop来实现。本质上,循环是WordPress用来显示某些文章的PHP代码。WordPress知道如何根据您的WP_Query自定义文章类型中的指定条件处理和格式化每个文章。

    WP_Query对开发人员也很有帮助。您可以使用此PHP类自定义WordPress主题,而无需直接查询数据库。

    如何使用WordPress WP_Query(4 种方式)

    现在您已经了解了WP_Query,让我们讨论如何创建您的第一个查询。这样,您可以快速轻松地自定义您的网站显示!

    1.创建一个循环

    您需要熟悉WordPress Loop才能开始使用。正如我们前面提到的,Loop负责从数据库中提取文章数据。它根据主题的模板文件确定内容的显示方式。

    根据您设置的参数,以下是Loop可以显示的内容:

    • 来自WordPress自定义文章类型和自定义字段的内容。
    • 在您的主页上发布标题和摘录。
    • 单个文章的内容和评论。
    • 使用模板标签的单个页面内容。

    在使用WP_Query自定义Loop之前,您需要了解Loop结构。这是一个基本循环的示例:

    <?php
    if ( have_posts() ) :
    while ( have_posts() ) : the_post();
    // Display post content
    endwhile;
    endif;
    ?>
    <?php
    if ( have_posts() ) :
    while ( have_posts() ) : the_post();
    // Display post content
    endwhile;
    endif;
    ?>
    <?php
    if ( have_posts() ) :
        while ( have_posts() ) : the_post();
            // Display post content
        endwhile;
    endif;
    ?>

    让我们分解这个循环的各个部分。首先,函数have_posts()将检查您的网站上是否有文章。如果是这样,while条件会继续每个文章的循环。本质上,这会通知您的数据库在您的网站上显示任何文章。

    但是,您可能不想显示所有文章。通过将WP_Query代码插入循环中,您可以使WordPress仅呈现某些文章:

    ?php
    // The Query
    $the_query = new WP_Query( $args );
    // The Loop
    if ( $the_query->have_posts() ) {
    echo ‘<ul>’;
    while ( $the_query->have_posts() ) {
    $the_query->the_post();
    echo ‘<li>’ . get_the_title() . ‘</li>’;
    }
    echo ‘</ul>’;
    } else {
    // no posts found
    }
    /* Restore original Post Data */
    wp_reset_postdata();
    ?php
    // The Query
    $the_query = new WP_Query( $args );
    // The Loop
    if ( $the_query->have_posts() ) {
    echo ‘<ul>’;
    while ( $the_query->have_posts() ) {
    $the_query->the_post();
    echo ‘<li>’ . get_the_title() . ‘</li>’;
    }
    echo ‘</ul>’;
    } else {
    // no posts found
    }
    /* Restore original Post Data */
    wp_reset_postdata();
    ?php
    // The Query
    $the_query = new WP_Query( $args );
    // The Loop
    if ( $the_query->have_posts() ) {
        echo '<ul>';
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            echo '<li>' . get_the_title() . '</li>';
        }
        echo '</ul>';
    } else {
        // no posts found
    }
    /* Restore original Post Data */
    wp_reset_postdata();

    这包含与ifwhile语句相同的基本循环结构。但是,还有一个额外的WP_Query 字符串。

    您可以自定义Loop以仅根据您设置的参数显示与特定WordPress分类、类别或作者关联的文章。您还可以按日期、标签、自定义字段等缩小结果范围。换句话说,在使用WP_Query自定义Loop时,您可以采取许多路线。

    2. 使用参数

    在构建WP_Query时,您需要包含四个基本元素:

    • Query argument
    • Query itself
    • The Loop
    • Post data reset

    查询中最关键的部分之一是参数(称为WP_Query args)。该参数通知WordPress您要从数据库中检索哪些数据。该参数不会显示您的所有文章内容,而是会在您的循环中设置一些条件。

    您可能注意到了前面示例中的 ($args) 行。这是您将包含查询参数的地方。

    构造您的WP_Query args,您需要将某些参数放在一个数组中。我们将在下一节讨论参数,但下面是基本参数的外观:

    $args = array(
    ‘parameter1’ => ‘value’,
    ‘parameter2’ => ‘value’,
    ‘parameter3’ => ‘value’
    );
    $args = array(
    ‘parameter1’ => ‘value’,
    ‘parameter2’ => ‘value’,
    ‘parameter3’ => ‘value’
    );
    $args = array(
        'parameter1' => 'value',
        'parameter2' => 'value',
        'parameter3' => 'value'
    );

    例如,如果您想显示具有“cooking”标签的文章,您可以通过以下方式编写参数:

    $query = new WP_Query( array( ‘tag’ => ‘cooking’ ) );
    $query = new WP_Query( array( ‘tag’ => ‘cooking’ ) );
    $query = new WP_Query( array( 'tag' => 'cooking' ) );
    

    如果您不包含WP_Query参数,则不会从您的数据库中提取任何内容。如果没有这些信息,WordPress将不知道要显示哪些文章。

    3. 设置参数

    正如我们前面提到的,设置参数对于自定义WP_Query很重要。您可以通过指定此信息使WordPress从您的数据库中检索自定义的文章集合。

    如果您不确定要在参数中包含哪些参数,WordPress提供了许多不同用途的示例。由于这些已经为您编码,因此可以在构建WP_Query时节省您的时间和精力。

    以下是您可以使用的一些常用参数

    • Posts_per_page – 设置要显示的文章数。
    • Author – 按一位或多位作者缩小结果范围。
    • Cat – 指定结果应属于的类别。
    • Tag – 拉出具有特定标签的文章。
    • Orderby – 按作者、文章类型、日期等对结果进行排序。
    • Order – 按升序或降序对结果进行排序。
    • Post_type – 定义查询是否应检索文章、页面或自定义文章类型。
    • Post_status – 指定文章是否正在进行、已安排、已发布或已删除。

    例如,您可能需要显示某个类别的文章。在这种情况下,您可以包含类别名称和slug:

    $query = new WP_Query( array( ‘category_name’ => ‘staff’ ) );
    $query = new WP_Query( array( ‘category_name’ => ‘staff’ ) );
    $query = new WP_Query( array( 'category_name' => 'staff' ) );
    

    这将拉取此WP_Query类别下的文章以及该类别的任何子项。

    使用不同的参数,您还可以显示特定日期的文章。要在工作日从上午9点到下午5点显示内容,您将使用以下参数:

    $args = array(
    ‘date_query’ => array(
    array(
    ‘hour’ => 9,
    ‘compare’ => ‘>=’,
    ),
    array(
    ‘hour’ => 17,
    ‘compare’ => ‘<=’,
    ),
    array(
    ‘dayofweek’ => array( 2, 6 ),
    ‘compare’ => ‘BETWEEN’,
    ),
    ),
    ‘posts_per_page’ => -1,
    );
    $query = new WP_Query( $args );
    $args = array(
    ‘date_query’ => array(
    array(
    ‘hour’ => 9,
    ‘compare’ => ‘>=’,
    ),
    array(
    ‘hour’ => 17,
    ‘compare’ => ‘<=’,
    ),
    array(
    ‘dayofweek’ => array( 2, 6 ),
    ‘compare’ => ‘BETWEEN’,
    ),
    ),
    ‘posts_per_page’ => -1,
    );
    $query = new WP_Query( $args );
    $args = array(
        'date_query' => array(
            array(
                'hour'  => 9,
                'compare'   => '>=',
            ),
            array(
                'hour'  => 17,
                'compare'   => '<=',
            ),
            array(
                'dayofweek' => array( 2, 6 ),
                'compare'   => 'BETWEEN',
            ),
        ),
        'posts_per_page' => -1,
    );
    $query = new WP_Query( $args );

    您可以使用的参数数量实际上是无限的。通过在您的参数中包含这些自定义条件,您的WP_Query可以成功地呈现正确的数据。

    4.用方法修改类属性

    由于WP_Query是一个PHP类,它包含称为属性的常量。这些是PHP类的变量。

    WordPress的开发人员建议不要直接更改WP_Query属性。但是,您可以使用方法与它们进行交互。

    方法的工作方式与函数类似。当您修改WP_Query的方法时,您可以自定义检索到的数据。

    在WP_Query的文档中,列出了许多基本任务的函数。例如,包含reset_postdata() 函数可能是编写WP_Query的重要步骤。此方法将重置$current_post和$post的属性。

    这可能是这样的:

    <?php
    // the query
    $the_query = new WP_Query( $args ); ?>
    <?php if ( $the_query->have_posts() ) : ?>
    <!– pagination here —>
    <!– the loop —>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <h2><?php the_title(); ?></h2>