isset($ wp_filter ['all'])中的“全部”是什么


10

我是WordPress的新手。我试图了解它如何生成XHTML页面。我猜这是它的功能do_action( 'hook-name' ),但是isset( $wp_filter['all] )在阅读函数do_action时我仍然对指令的理解有些困惑,因为我不理解单词的含义all

是PHP功能还是WordPress功能?

Answers:


9

all只是WordPress开发人员选择的字符串,其行为不同于其他任何钩子。当您连接时all,您的回调将触发其他所有钩子

我不会花太多时间来查看的来源do_action,只需知道:

  1. add_action( 'x', 'whatever' )将意味着whatever火灾do_action( 'x' )
  2. add_action( 'all', 'whatever' )将意味着whatever火的每一个 do_action,无论挂钩的名称。

5

有条件的if ( isset($wp_filter['all']) ) {您可以在以下挂钩创建函数中找到:

  • apply_filters
  • apply_filters_ref_array
  • do_action
  • do_action_ref_array

这些之间的差异在于发送的参数数量。我们要么需要多个参数,要么需要ref_array单个参数。“动作与过滤器”的另一个区别很简单,动作可以执行任何功能/动作,并且过滤器名称通常保留给采用字符串数据并返回经过过滤的数据的函数。

好的,这是创建钩子的方式。并且钩子确实具有名称,并且您可以在相同的钩子名称中读取多个函数名称(读取:标记)。

在此处输入图片说明

但是,一旦定义了与特定挂钩相关的所有函数,就需要将所有挂钩名称和相关函数名称存储在某处。这就是为什么我们global $wp_filter在WordPress中使用了。如果输出该变量,您将得到类似...

Array
(
    [pre_term_name] => Array
        (
            [10] => Array
                (
                    [sanitize_text_field] => Array
                        (
                            [function] => sanitize_text_field
                            [accepted_args] => 1
                        )

                    [wp_filter_kses] => Array
                        (
                            [function] => wp_filter_kses
                            [accepted_args] => 1
                        )

                )

            [30] => Array
                (
                    [_wp_specialchars] => Array
                        (
                            [function] => _wp_specialchars
                            [accepted_args] => 1
                        )

                )

        )

好吧,让我们不要争论这个变量的名称。就个人而言,我将其称为不同,可能是$wp_hooks因为未使用此名称。但是,如果我们重温历史,我们将找到do_action,因为@since 1.2.0apply_filters@since 0.71(发布于2003年6月9日)。这给您一个很好的解释,为什么要调用它$wp_filter。最有可能是因为过滤器是在WordPress中首先引入的。后来他们介绍了动作。

只是建立在来自@TheDeadMedic的说法之上...

add_action('all','whatever')意味着每个do_action都会触发任何事件,而不管钩子的名称如何。

我提出了一个问题,为什么我们需要$wp_filter['all']?仅举几个例子。在未来的WordPress版本中进行内省,测试以及可能的更多系统内部功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.