掌握WP_Query:操作和过滤器

欢迎来到我们系列的第三部分“ Mastering WP_Query”。 在上一部分中,我们介绍了与WP_Query类相关的13个WordPress函数。 在这一部分中,我们将回顾可与WP_Query结合使用的WordPress挂钩(过滤器和操作)。

因此,事不宜迟,让我们开始吧!

WP_Query相关过滤器

在食典的“过滤器参考”中,标题“ WP_Query过滤器”下列出了16个WordPress过滤器。 在本节中,我们将讨论它们。 这将是一个相当快的部分,因为大多数过滤器都是关于WP_Query类进行的数据库查询的不同“子句”。

在通过了与子句无关的过滤器之后,我们将立即与他们联系。

过滤查询的找到的帖子数: found_posts

使用此过滤器,可以更改找到的项目数,而不受WP_Queryposts_per_page参数的限制。

该过滤器对于创建自定义分页特别有用。 让我们看一下食典的内容

例如,如果您在查询中声明自定义偏移量值,则WordPress不会从$ wp_query-> found_posts参数中扣除偏移量(例如,如果偏移量为10后有45个可用帖子,则WordPress会忽略偏移量,仍将found_posts的值设为55)。

说得通。

筛选查询以运行以检索找到的帖子: found_posts_query

找到的项目数是使用MySQL中的SELECT FOUND_ROWS()命令计算的。 如果需要以其他方式计算找到的项目数,则可以使用此过滤器将此命令更改为其他命令。

筛选整个SQL查询: posts_request

如果要更改完成的SQL查询,则应使用该过滤器。 它基本上会覆盖由WP_Query类组成的整个SQL查询。

过滤查询返回的数组: posts_results

如果要更改WP_Query随SQL查询生成的PHP array ,可以使用此过滤器。 Codex上一个简洁的示例,因此您可以了解它的工作原理。

(请注意,此过滤器处理从SQL查询生成的原始数组。)

筛选检索到的帖子数组: the_posts

posts_results不同, the_posts过滤器等待对该数组进行内部处理,这意味着将检查该数组是否包含未发布和粘性的帖子。 如果您不想在数组中发布或发布,请使用此选项。

过滤查询的字段列表(和SELECT子句): posts_fields

SQL查询的SELECT子句确定将从结果数据库行中选择哪些数据库字段,此过滤器帮助您过滤它。

过滤查询的LIMIT子句: post_limits

SQL查询的LIMIT子句设置查询的限制,此过滤器可帮助您过滤它。

过滤查询的DISTINCT子句: posts_distinct

SQL查询的DISTINCT子句指出查询应仅返回不同的结果,此过滤器可帮助您过滤它。 自然, WP_Query不会返回不同的结果,但是当您将此过滤器与返回"DISTINCT"的函数一起使用时,查询将被调整为仅返回不同的结果。

过滤查询的WHERE子句: posts_where

SQL查询的WHERE子句用于过滤MySQL的SELECTINSERTUPDATEDELETE语句,此过滤器可帮助您过滤此过滤器。 尽管WP_Query类完成了过滤结果所需的所有工作,但您可以通过使用此过滤器使它更进一步。

计算分页后过滤查询的WHERE子句: posts_where_paged

该过滤器是posts_where过滤器的迭代,可与分页查询一起使用。

过滤搜索查询的WHERE子句: posts_search

这个过滤器是posts_where过滤器的另一个迭代,您可以使用它来更改查询的WHERE子句,该查询用于在WordPress中获取搜索结果。

过滤查询的JOIN子句: posts_join

SQL查询的JOIN子句允许您在多个数据库表中使用SQL命令,此过滤器有助于您对其进行过滤。 这是MySQL的高级部分之一,因此,除非您非常了解MySQL JOIN的工作原理,否则不建议使用此过滤器。

计算分页后过滤查询的JOIN子句: posts_join_paged

正如posts_where_paged是一个迭代posts_where ,这是一个迭代的posts_join过滤器,寻呼查询作品。

过滤查询的ORDER BY子句: posts_orderby

SQL查询的ORDER BY子句可安排查询的顺序,此过滤器可帮助您过滤顺序。

过滤查询的GROUP BY子句: posts_groupby

SQL查询的GROUP BY子句使查询按数据库字段返回“分组的”结果,此过滤器帮助您过滤如何对结果进行分组。

过滤查询的所有子句: posts_clauses

如果您想同时处理所有子句,那么也有一个过滤器: posts_clauses 。 此过滤器涵盖WHEREGROUP BYJOINORDER BYDISTINCTSELECTLIMITS子句。

WP_Query相关动作

现在,我们已经审查了与WP_Query相关的过滤器,让我们继续进行另一种挂钩:动作。

在运行查询之前对其进行干预: pre_get_posts

在解析查询之前,您可以使用此操作与其进行交互(例如,注入其他查询变量)。 让我们看一下汤姆·麦克法兰(Tom McFarlin)的一个简单示例,以学习如何从主循环中排除类别:

<?php

function tutsplus_exclude_category( $wp_query ) {

    /*
     * Add the category to an array of excluded categories. In this case, though,
     * it's really just one.
     */
    $excluded = array( '-1' );

    /*
     * Note that this is a different, perhaps, cleaner way to write:
     * 
     * $wp_query->set( 'category__not_in', $excluded );
     */
    set_query_var( 'category__not_in', $excluded );

}

add_action( 'pre_get_posts', 'tutsplus_exclude_category' );

?>

处理查询的解析: parse_query

pre_get_posts不同, pre_get_posts 设置查询变量之前会干预查询,而parse_query动作会设置查询变量之后处理该过程。 因此,如果要检查当前变量并根据它们采取措施,则应使用此措施。

修改发布对象: the_post

术语the_action有点令人困惑,因为它是动作挂钩,与WP_Query相关的函数的名称,也是WP_Query类的方法。

正如食品法典所述,此操作使我们可以在查询和设置后立即修改post对象。 使用此操作,您可以直接更改输出。 让我们看一个简单的例子:

<?php

function tutsplus_featured_badge( $post ) {

    if ( is_single() && in_category( 'featured' ) ) {
        
        echo '<div class="featured-badge">' . __( 'FEATURED', 'tutsplus' ) . '</div>';

    }

}

add_action( 'the_post', 'tutsplus_featured_badge' );

?>

第三部分结束

操作和过滤器始终是一个有趣的话题,可以谈论和讨论。 (事实上​​,我的两个有关WordPress动作WordPress过滤器的系列文章非常有趣,并且得到了读者的好评。)我希望您和我一样喜欢这部分。

想要在文章中添加任何内容吗? 在下面的评论部分中发表评论。 而且,如果您喜欢这篇文章,请不要忘记与您的朋友分享!

下一部分见,我们将在此讨论WP_Query类的属性和方法!

翻译自: https://code.tutsplus.com/tutorials/mastering-wp_query-actions-and-filters--cms-23112

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值