钩子解释:如何使用动作、过滤器和自定义钩子

温馨提示:注册会员付费购买资源可永久免费下载更新版本

WordPress Hook是WordPress开发者武库中最重要的工具之一。它们是WordPress插件和主题开发的基础。你可以使用WordPress的许多内置钩子将自定义代码“连接”到WordPress核心,并执行或修改某些内容。

有两种类型的WordPress挂钩:动作和过滤器。钩子如此普遍,甚至WordPress核心本身也广泛使用它们。WordPress也为你提供了一种方法来定义你自己的定制钩子,这样其他开发者就可以钩入你的代码。

理解动作、过滤器和定制钩子是如何工作的,对于掌握WordPress开发是至关重要的。

本文的前半部分介绍了WordPress钩子的基础知识,并通过多个例子解释了它们是如何工作的。在后半部分,您将学习如何使用钩子定制WordPress,创建您自己的定制钩子,并使用它们来构建您自己的可扩展插件。

什么是WordPress钩子?

挂钩操作与过滤器

WordPress hook是如何工作的?

我在哪里注册钩子和它们的功能?

使用WordPress挂钩

WordPress挂钩列表和资源

查找注册在WordPress页面上的挂钩

“全部”挂钩

WordPress钩子存放在哪里?

如何创建一个自定义的WordPress挂钩

从WordPress钩子中移除回调函数

更多WordPress hook教程

什么是WordPress钩子?

一个WordPress页面由许多功能和数据库查询组成。WordPress核心、插件和主题协同工作,输出文本、图像、脚本和样式等页面元素。完成组装后,浏览器会将它们放在一起并呈现页面。

WordPress钩子允许你在某个时候“钩住”这个构建过程,并运行你的定制代码。Hook的主要功能是让你在不接触核心文件的情况下修改或者添加功能到WordPress。

Hook将帮助你用你自己的代码扩展WordPress。

WordPress的插件API赋予了WordPress hook功能。你可以通过在WordPress运行时的特定实例中调用一些被称为钩子函数的WordPress函数来使用钩子。

有了hook函数,就可以在回调函数中捆绑自定义代码,并在任意一个hook中注册。注册后,这个回调将在钩子所在的地方运行,允许你添加或替换默认的WordPress特性。

钩子在代码执行过程中的位置是一个重要的因素。在接下来的几节中,您将了解到它的重要性。

两种类型的WordPress钩子:动作和过滤器

WordPress包括两种类型的钩子,叫做动作和过滤器。动作允许你在WordPress运行时的某些预定义点执行某些动作,而过滤器允许你修改WordPress处理的任何数据并返回它。

在WordPress代码中动作被定义为:

do_action( ‘action_name’, [optional_arguments] );

action_name字符串是操作的名称。您可以指定[optional_arguments]变量来将附加参数传递给回调函数。如果未指定该字段,其默认值将为空。

示例:do_action( ‘wp_head ‘)每次WordPress处理站点标题的时候,你都可以挂接这个动作来运行自定义代码。该操作没有其他参数。

过滤器在WordPress代码中被定义为:

apply_filters( ‘filter_name’, ‘value_to_be_filtered’, [optional_arguments] );

filter_name字符串是过滤器的名称,value_to_be_filtered变量是需要过滤并返回的要求,value [optional_arguments]变量可以传递附加参数,就像actions一样。

例如:apply _ filters(‘ admin _ footer _ text ‘,string $ text)过滤器可以用来修改管理页脚中显示的文本。从WordPress 5.4开始,它的默认值将在管理区的页脚显示这句话。感谢您使用WordPress进行创作。

稍后你将通过WordPress core中的许多例子学习如何操作和过滤钩子。

一旦挂钩,您可以指示您的代码执行或定制网站上的一些内容。例如,您可以使用钩子在发布文章后自动发送电子邮件,或者加载自定义样式表来改变您的站点的外观。

WordPress hooks可以帮助你与网站互动或者修改网站。

理解hooks最简单的方法就是把你的WordPress网站想象成一栋房子。

挂钩类似于使用起重机来回移动建筑物品。被传输的项是一个回调函数,它包含您的自定义代码。这些项目(或功能)可以帮助你建造或改造你的房子。

WordPress中“wp_head”动作钩子的例子

回调函数可以是常规的PHP函数,默认的WordPress函数,或者你定义的自定义函数。

我们只能在连接到特定挂钩的特定载体上运输特定物品。因此,动作只能链接到动作函数。同样,过滤器只能链接到过滤器功能。

尽管更换起重机上的挂钩和支架很繁琐,但WordPress通过包含2200多个默认挂钩使其变得非常容易。

WordPress 5.1有超过2200个原生钩子(来源:亚当·布朗)

你可以在WordPress core上找到所有的钩子,这样你就可以找到你想要钩子的确切位置并运行你的定制代码。

挂钩操作与过滤器

根据WordPress插件手册:

挂钩是一段代码与另一段代码交互/修改的一种方式…有两种类型的钩子:动作和过滤器。

钩子、动作和过滤器这三个术语的用法普遍不一致。一些教程和指南将它们与它们的相关函数混合在一起。这种混乱的主要原因之一是钩子工作方式的复杂性。

即使你仔细观察WordPress核心内部,你也会发现添加动作和过滤器并没有太大的区别。以下是wp-includes/plugin.php文件中ADD_ACTION()函数的源代码:

function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { return add_filter( $tag, $function_to_add, $priority, $accepted_args );}

add_action()函数简单地调用add_filter()函数并返回它的值。为什么?因为它们基本上以相同的方式工作,除了一点不同。

apply_filters()函数返回一个可以改变现有数据类型的值,而do_action()函数返回nothing(PHP中的NULL值)。

如果你还很迷茫,请不要着急!看完这篇文章的前半部分,一切就都清楚了。我们将坚持官方的WordPress Codex术语,因为它清晰、准确、通用。

现在,让自己熟悉下面显示的钩子子程。

钩子程序:钩子、钩子函数和回调函数。

我们来分解一下动作和钩子的区别。

WordPress钩子动作过滤器动作用于在WordPress Core执行期间的特定点运行自定义函数。过滤器用于修改或自定义其他功能使用的数据。动作由do_action( ‘action_name’ )WordPress代码中的函数定义/创建。过滤器由apply_filters( ‘filter_name’, ‘value_to_be_filtered’ )WordPress代码中的函数定义/创建。动作也称为动作钩子。过滤器也称为过滤器钩子。动作只能与动作函数挂钩。例如add_action(),remove_action()。过滤器只能与过滤器函数挂钩。例如add_filter(),remove_filter()。动作函数不需要向它们的回调函数传递任何参数。过滤器函数需要至少传递一个参数给它们的回调函数。动作函数可以执行任何类型的任务,包括改变WordPress工作方式的行为。过滤器函数仅用于修改过滤器传递给它们的数据。动作函数应该return没什么。但是,它们可以echo输出或与数据库交互。过滤器函数必须将return其更改作为输出。即使过滤器函数什么都不改变,它仍然必须return是未修改的输入。只要代码有效,动作几乎可以执行任何操作。过滤器应该以孤立的方式工作,因此它们不会产生任何意外的副作用。总结:一个动作会中断常规的代码执行过程,用它接收到的信息做一些事情,但什么都不返回,然后退出。总结:过滤器修改它接收到的信息,将其返回给调用钩子函数,其他函数可以使用它返回的值。

有时,您可以使用动作或过滤器来实现相同的目标。例如,如果要修改文章中的文本,可以使用publish_post操作注册一个回调函数,并在将文章保存到数据库时更改文章内容。

// define the callback function to change the textfunction change_text_callback() { // add the code to change text here}// hook in to the ‘publish_post’ action with the add_action() functionadd_action( ‘publish_post’, ‘change_text_callback’ );

或者,您可以使用_content过滤器注册另一个回调函数,以便在文章内容显示在浏览器中之前对其进行修改。

// define the callback function to modify the textfunction change_text_another_callback( $content ) { // add the code to change text here and then return it return $filtered_content;}// hook in to ‘the_content’ filter with the add_filter() functionadd_filter( ‘the_content’, ‘change_text_another_callback’);

两种不同的方法有相同的结果。知道什么时候使用一个而不是另一个是成为一个好的WordPress开发者的关键。

WordPress hook是如何工作的?

house的例子很简单,你可以理解钩子的基本功能,但是它没有抓住它们如何工作的复杂性。最重要的是钩子位置和特异性的概念。

一个更好的例子是把处理WordPress网页想象成组装一辆汽车。与制造一辆汽车所需的时间不同,组装一个网页几乎是瞬间的。

组装网页就像组装汽车。

就像现代流水线上的汽车是如何一辆一辆组装起来的一样,WordPress的网页是由服务器和客户端一个一个组装起来的。

WordPress核心就像汽车发动机、底盘和其他必需品一样,为网站的“核心”功能提供动力。

仅仅使用WordPress core就可以拥有一个强大的网站,但这有什么乐趣呢?你需要给网站添加令人兴奋的功能。这就是WordPress插件和主题介入的地方,它们都大量使用了钩子。

在上面的例子中,每个编号的站点就像WordPress核心中的一个钩子。有两种类型的站点,如操作和过滤器。每个工作站包含一个特定类型的插槽,该插槽仅接受某些工具,类似于动作功能和过滤功能。

出于模块性和效率的考虑,所有的站点都以频繁的间隔放置。

根据特定地点的要求,我们可以安装(或挂接)最适合该特定地点工作的工具。这些工具就像回调函数,用来与WordPress交互或修改它。

一些工具可以显著地改变汽车的工作,就像注册一个动作的回调。其他工具只是用来自定义汽车的外观,比如注册到过滤器的回调。

在正确的地点使用正确的工具对于制造一流的汽车至关重要。同样,钩子帮助我们根据自己独特的需求定制WordPress。

如果把这个类比延伸一下,插件就像是增加了有用的汽车功能,比如安全气囊、娱乐控制台、遥控无钥匙系统等。(这些都是为了增强WooCommerce的功能)。主题类似于定制汽车的视觉部分,如整体设计、涂装、轮圈等。(这是自定义WordPress主题的方式)。

我在哪里注册钩子和它们的功能?

在WordPress中添加钩子有两种推荐的方法:

插件:制作自己的插件,并添加所有自定义代码。

子主题:在子主题的functions.php文件中注册钩子和回调函数。

对于本教程,让我们从创建一个插件开始。为此,请在您的/wp-content/plugins/目录中创建一个新文件夹。

将我的插件命名为salhooks,但你可以随意命名。根据WordPress指南,你需要在插件目录中创建一个同名的PHP文件(salhooks.php)。

将下面的标题字段添加到你的插件文件中,并注册到WordPress。你可以在WordPress Codex中了解更多关于插件标题的要求。

声明:

1,本站分享的资源来源于用户上传或网络分享,如有侵权请联系站长。

2,本站软件分享目的仅供大家学习和交流,请不要用于商业用途,下载后请于24小时后删除。

3,如果你也有好的建站资源,可以投稿到本站。

4,本站提供的所有资源不包含技术服务请大家谅解!

5,如有链接无法下载,请联系站长!

6,特别声明:仅供参考学习,不提供技术支持,建议购买正版!如果发布资源侵犯了您的利益请留言告知!


创网站长资源网 » 钩子解释:如何使用动作、过滤器和自定义钩子