NIUBI
wordpress教程

WP 爱好者带你了解-WordPress 的钩子、动作和过滤器的作用和工作原理

4周前/ 38/ / WP爱好者/ 已收录/

本文介绍了 WordPress 开发中最重要的话题之一:WordPress 钩子,包括动作钩子和过滤钩子。钩子不仅是 WordPress 插件工作方式的核心,而且是 WordPress 生态系统中几乎所有代码的核心:大多数 WordPress 主题都大量使用钩子,“WordPress 核心”本身也是如此。WordPress 钩子是 WordPress 开发中一个绝对必须知道的话题。

 

关于 WordPress 钩子的关键要点:

  • WordPress 钩子是一个关键的 WordPress 特性,它允许开发人员在指定的地方将自定义代码插入到 WordPress 的 PHP 处理中。
  • 开发人员使用称为 hooked 函数的 PHP 函数编写此自定义代码。存在两种挂钩函数:动作钩子和过滤器。
  • 有两种钩子:动作钩子和过滤钩子。动作钩子“钩住”动作,过滤器钩子“钩住”过滤器。
  • 过滤器通过过滤器钩子传递代码或标记;它们修改传递的内容,并且必须返回结果,以便 WordPress 在其常规处理中使用。
  • 相反,动作钩子操作不需要返回值,并且通常不通过它们的操作挂钩传递特定的参数。

理解钩子并不是那么容易,部分原因是术语本身很难形象化和相互区分。

但回报是巨大的:作为一个开发人员,我们发现使用过滤器和操作可能是我们与 WordPress 交互的最常见的方式。随着时间的推移,它也成为我们在 WordPress 中最喜欢做的事情之一。

术语.钩子 vs 动作 vs 过滤器

特别是在这种情况下,理解术语“钩子”、“动作”和“过滤器”是成功的一半。例如,WordPress 的法典中,这三个术语的使用都非常随意,而且前后不一致。

我们在本章中使用的定义是在 WordPress 中最常见的定义,它们最有助于理解实际发生的事情。因此,请坚持我们在这里提出的理解,当其他人以多种方式使用这些术语时,不要气馁。

钩子、动作和过滤器的关系

钩子是 WordPress 代码中可以添加函数的地方。当您创建一个钩子时,您为自己和其他开发人员提供了在该位置添加附加功能的机会。

钩子函数是定制的 PHP 函数,我们可以在钩子指定的位置“钩住”WordPress。

钩住的函数有两种类型:动作和过滤器。筛选器修改现有输出,而操作可以执行任何类型的自定义功能。

钩子有两种类型:动作钩子和过滤钩子,它们基于接受哪种类型的钩子函数。

 

WordPress 挂钩:将外部承包商带入 WordPress 工厂

为了解释钩子,我们将回到我们的中心类比 WordPress 作为一个工厂。

记住,WordPress 需要外部承包商来做一些工作。我们的承包商在 WordPress 工厂没有固定的位置,他们被困在外面,直到他们被工厂自己邀请进来。

就我们而言,这些外部承包商来自两个地方:

  1. Plugins
  2. The functions.php file inside the parent or child theme

外部承包商本身就是插件和函数.php 改变了 WordPress 工厂的运作。

钩子动作钩子和过滤钩子是 WordPress 调用这些外部承包商的方式。换句话说,WordPress 钩子以指定的方式在指定的位置拉入外部代码。

WORDPRESS 如何呼唤“承包商”

我们可以把 WordPress 的“钩子”想象成真正的巨型工厂钩子,承包商就骑在上面,像这样:

 

每个钩子都有一个特定的名称,比如 wp\u head,对应于 WordPress 工厂的一部分过程(在 wp\u head 的情况下,是构建页面的 HTML<head>部分的过程)。

这些钩子延伸到大厅,这样承包商就可以把它们搭进去,而且它们是按照特定的顺序来做的。在<head>完成之前,wp\u head 钩子向右移动到大厅和后面,在<body>完成之前,wp\u footer 钩子向右移动到大厅和后面,依此类推。因此,承包商总是骑着他的钩子直接到活跃的,被工厂的一部分工作。

当一个承包商想成为一个特定过程的一部分时,他会等待那个钩子出现在入口处,然后直接骑着那个钩子进入工厂的适当部分。

如果承包商没有骑上合适的钩子,他就无法到达他在工厂里要去的地方。钩子是“邀请”外部代码(来自函数.php,插件等)进入 WordPress PHP 处理的定义区域。

两种钩子,两种承包商

我们对 WordPress 的钩子、操作和过滤器的理解已经走了一半。另一部分更具体一些:大厅有两种钩子,动作钩子和过滤钩子。

回顾一下 WordPress 钩子图,让我们了解操作和过滤器钩子。

动作挂钩

动作钩子往往会在里程碑处摇摆不定:例如,wp\u head 动作钩子的“页面<head>部分的构建几乎完成了”,wp\u footer 动作钩子的“页面<body>部分的构建几乎完成了”。

当承包商把行动挂钩带进工厂时,他们倾向于做任何他们想做的事情:在页面上添加一堆东西,或者做完全其他的事情,比如记录错误,甚至发送电子邮件。

过滤器挂钩

过滤器挂钩的工作方式有点不同。搭上行动钩子的承包商可以为所欲为,对任何人都不负责。但是使用过滤器钩子的承包商实际上将自己插入到了正常工人的流程中:他们得到了一些要处理的东西,比如一个文本块,并且必须通过一个 PHP return 语句将相同的文本块(可能稍微修改)返回给普通工人。

因此,使用过滤钩的承包商通常不只是想做什么就做什么;他处理的是他在工厂所在部门所做的工作。该部门经理可能会说:“这一部门在职位标题上起作用。”。“你想怎么做就怎么做,但如果你修改后不把帖子标题还给我,整个过程就无法正常进行。”

这些承包商是什么?

希望到目前为止我们说得有道理;现在我们要更专业一些,这样你就可以开始写这些东西了。

连接到 action 钩子和 filter 钩子的都是定制的 PHP 函数,我们或其他任何人都可以编写。

因为这些函数是通过将自己附加到 WordPress 钩子而进入 WordPress 的,也就是说,从它们的正式术语之外“钩住”就是钩住函数。

有两种钩子函数:

  1. Actions,也称为 action 函数,与 WordPress 的 action 挂钩,以及
  2. 过滤器,也称为过滤器函数,它与 WordPress 的过滤器挂钩。

让我们看看每一个。

过滤函数的使用示例

我们的第一个承包商是一个过滤器或过滤器功能。换言之,它是一个函数,通过过滤器挂钩进入工厂。

/* Environment: We're in functions.php or a PHP file in a plugin */

function wpshout_filter_example( $title ) {
	return 'Hooked: ' . $title;
}
add_filter( 'the_title', 'wpshout_filter_example' );

 

以下是有关上述代码的知识:

  1. 我们的过滤器,也就是说,钩住过滤器钩子的代码实际上是一个 PHP 函数,因此函数{}。
  2. wpu filter\u example 是筛选器函数的名称。
  3. ($title)是函数的单个参数。这是 WordPress 工厂(WordPress 核心本身)传递给承包商的工作。
  4. return'Hooked:'。$title;是函数所做的工作。它在传递的标题中添加了“Hooked:”一词,并将其返回给 WordPress 核心以继续定期处理。
  5. 返回非常重要:它是函数如何将其工作返回给 WordPress 核心的。这句话最好从右到左读:它说:“取常规标题,在前面加上‘Hooked:’,然后把它传回去。”
  6. add_filter('the_title','wpshout_filter_example');非常重要:这就是如何将过滤器函数添加到过滤器挂钩中!这应该有自己的项目清单。

下面是如何理解最后一行:

  1. add_filter();是一个 WordPress 函数。它说:“把一个新的过滤器挂到一个现有的过滤器挂钩上。”
  2. “标题”是我们将要进入工厂的过滤器挂钩的名称。
  3. “wpshout\u filter\u example”是承包商的名称:换句话说,就是我们编写的过滤器的名称,以及我们要连接到我们指定的过滤器挂钩(在本例中,是\u 标题)的名称。

因此 filter wpshout\u filter\u example()钩住 filter hook 的\u 标题。当它这样做时,它只需在标题中添加“Hooked:”,并将其返回。有道理?

动作函数的使用示例

我们的下一个承包商是一个动作或动作函数:一个将动作挂钩带进工厂的函数。

/* Environment: We're in functions.php or a PHP file in a plugin */

function wpshout_action_example( ) {
	echo "WPShout was here.";
}
add_action( 'wp_footer', 'wpshout_action_example' );

 

如果您已经理解了上面的过滤器示例,那么您将了解有关 WordPress 操作示例的几乎所有内容:

  1. 函数 wpshout\u action\u example(){}表示此操作(或操作函数)名为 wpshout\u action\u example(),不带参数。
  2. echo“WPShout 在这里。”是函数的作用。echo 是一个 PHP 命令,我们稍后将讨论它。
  3. add_action('wp_footer','wpshout_action_example');是将 wpshout_action_example 操作挂钩到 wp_footer 操作挂钩的操作。

正如我们所指出的,与我们的过滤器示例的主要区别是钩住的函数不返回任何东西。相反,它直接在页面上回显(打印)消息。这条消息将打印在哪里?它将打印在页脚部分的最开始,无论主题作者在哪里放置了 wp\u 页脚操作钩子。

zibll V5.01 主题-WP 爱好者独家完美版-BG
zibll V5.01 主题-WP 爱好者独家完美版

zibll V5.01 主题-WP 爱好者独家完美版

zibll V5.0 2020-12-25 新功能 全新的推广返佣功能 [查看详情] 全新的站内消息功能 [查看详情] 全新的后台设置框架 [查看详情] 删除列表单次加载文章数设置选项:在 w...

Tint V3.1 官方原版无任何添加-BG
Tint V3.1 官方原版无任何添加

Tint V3.1 官方原版无任何添加

主题介绍 Tint V3 是基于 Tint 主题的完全重构版本,在继承主要功能的基础上,采用了更新的前后端分离架构,对前端部分使用 React 进行了完全重写,并在后端服务接口适配上做了修改。为了保持...

这种不同的操作可以做大多数事情,过滤器必须返回对给定内容的修改,这是这两种函数之间的主要区别,这两种函数在其他方面非常相似。

我们学到了什么

WordPress 使用动作和过滤器来扩展它所能做的,从我们今天展示的愚蠢的例子,一直到像 WooCommerce 这样的超复杂插件。我们已经了解了钩子、动作和过滤器的用途,以及它们如何工作的基础知识。

总而言之:WordPress 在 WordPress 页面生成过程中的特定位置注册操作和过滤器挂钩。任何开发人员都可以编写自己的函数来钩住这些操作和过滤器钩子。过滤器(或“过滤器函数”)修改所给的内容,并通过返回返回;操作(或“操作函数”)可以回显文本、修改数据和其他任何内容,并且不需要返回值。

WordPressHooks 系统实际上是 WordPress 全面开发的门户,所以不要害怕回顾这些资料,对其进行实验,并使其成为您自己的。

点点赞赏,手留余香

还没有人赞赏,快来当第一个赞赏的人吧!
admin给Admin打赏
×
予人玫瑰,手有余香
  • 2
  • 5
  • 10
  • 20
  • 50
2
支付
收藏 0 海报

版权归属:本文为原创文章,版权归 所有

本文链接:( 欢迎分享本文,转载请保留出处 )

免责声明:如发现本站有涉嫌抄袭侵权/违法违规的内容,请邮件/留言反馈,一经查实本站将立刻删除!

<< 上一篇

2021-02-07

下一篇 >>

2019-04-05

全部评论( 0 条 )
扫一扫二维码分享