Where Are Hooks?

时间:2016-08-07 作者:wpquestionz

代码:

<?php do_action(\'post_footer\'); ?>
Based on some reading, 这似乎调用了钩子操作。所以,我浏览了Editor 我没有发现post_footer 在任何地方我还注意到它把这些钩子称为其他地方的钩子,所以知道这些钩子存储在哪里会很有用。这些钩子操作存储在哪些文件中?

我搜索使用的是add_action 在每个文件中查找post_footer 作为参数之一,但从未找到post_footer 作为一种行动。如果不在php文件中,这些操作挂钩还会在哪里?

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

挂钩/动作最好被视为事件。

运行此代码时:

add_action( \'post_footer\', \'toms_footer_stuff\' );
你是说当post_footer 事件发生时,运行toms_footer_stuff 作用

这些功能的形式如下:

add_action( name_of_action, php_callable );
PHP可调用是可以被称为表示为对象的东西。它可以是以下任何一种:

add_action( \'post_footer\', \'toms_footer_stuff\' ); // a function
add_action( \'post_footer\', array( \'toms_class\', \'toms_footer_stuff\' ); // a static method on a class
add_action( \'post_footer\', array( $toms_class, \'toms_footer_stuff\' ); // a method on an object
add_action( \'post_footer\', function() { echo "hello world"; } ); // an anonymous function
add_action( \'post_footer\', $toms_closure ); // a Closure
当你打电话的时候do_action(\'post_footer\'), 你是说post_footer 事件正在发生,请调用所有与之相关的东西。没有post_footer 要调用的函数(除非您自己定义一个函数,但这只是巧合,除非您调用它,否则它不会运行add_action ).

post_footer 与数组中的键有更多共同点。

过滤器类似,只是它们将值作为第一个函数参数,并返回它。

在内部,它们使用与操作相同的系统,因此这两个调用应该执行相同的操作:

do_action( \'init\' );
apply_filters( \'init\', null ); // not recommended/tested
操作用于执行工作,过滤器用于调整或修改数据/内容。如果你在过滤器中工作,你的网站会变慢。过滤器被调用的次数比操作多得多,而且往往会发生多次)。另一方面,行动往往在特定时间发生一次。

SO网友:Andy Macaulay-Brook

WordPress运行以生成页面的代码中的任何位置,do_action()do_filter() 定义挂钩。这些钩子定义可以在核心、插件或主题中。

我猜你的do_action(\'post_footer\') 在一个主题内,只是因为我不认为它是核心的标准挂钩。该主题的作者将其放在那里,以便插件或子主题的作者可以使用它轻松地挂接他们自己的代码。

虽然web上有钩子指南,但有时您最好深入核心代码以找到所需的钩子,因为它们会随着时间的推移而变化。

相关推荐

OOP development and hooks

我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private