GG资源网

一文搞懂什么是WordPress的钩子(WordPress的钩子、动作和过滤器的作用和工作原理详解)

一文搞懂什么是WordPress的钩子

wordpress钩子是开发wordpress主题和插件中很重要的一个概念,搞懂wordpress钩子,可以帮让我们在开发主题时事半功倍。

WordPress常用的有两种钩子,一种是动作(action),另外一种是过滤器(filter)钩子。

动作钩子概念

动作钩子是wordpress代码执行到某处或某个事件发生时触发的一系列函数,插件可以利用动作钩子API在WP代码执行的特定点之前插入一系列函数以控制执行。它跟过滤钩子极像,唯一不同的是过滤钩子返回一个处理后的值,而动作钩子仅完成函数执行并不返回值,如果钩子不存在则返回NULL并新增该钩子。

过滤钩子原理

其实动作钩子和过滤钩子它们的实现原理是一样的。它主要利用一个全局变量$wp_filter,增加动作函数时使用add_action()函数给全局变量$wp_filter增加了一个数组元素,这个元素键名中含有钩子名,值中含有对应函数及执行优先级等信息,在调用do_action()函数使用动作钩子时,它通过循环查找出所有跟钩子关联的函数并将其依次调用,最后返回处理后的数据。

语法结构

add_action()作用:该函数用于给指定的动作钩子$hook添加指定的挂载函数$function_to_add,同时它可以确定挂载函数执行优先级及其可接收参数个数;

$hook 为钩子名
$function_to_add 为挂载函数名
可选参数$priority为该挂载函数执行的优先级,默认为10,该数字越小则越早执行,数字相同则按其添加到钩子上的顺序执行,越早添加越早执行
可选参数$accepted_args确定挂载函数接收的参数个数,默认为1

之前写过这个函数,感兴趣的可以详细了解:add_action

例子说明

在wp-includes/general-template.php文件中有一个wp_head动作钩子,我们可以看看这个动作钩子函数

其中里面有个do_action,定义了wp_head钩子,我们在用这个钩子的时候使用了add_action(‘wp_head’, ‘xxzhuti_wp_head’),由此可见do_action定义了一个动作,并且执行了定义的这个动作,根据这个原理我们也可以用do_action定义自己的动作钩子。

WordPress的钩子、动作和过滤器的作用和工作原理详解

本文介绍了WordPress开发中最重要的话题之一:WordPress钩子,包括动作钩子和过滤钩子。钩子不仅是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作为一个工厂。

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

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

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

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

钩子动作钩子和过滤钩子是WordPress调用这些外部承包商的方式。换句话说,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的过滤器挂钩。

让我们看看每一个。

过滤函数的使用示例

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

一文搞懂什么是WordPress的钩子(WordPress的钩子、动作和过滤器的作用和工作原理详解)

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

  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:”,并将其返回。有道理?

动作函数的使用示例

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

一文搞懂什么是WordPress的钩子(WordPress的钩子、动作和过滤器的作用和工作原理详解)

如果您已经理解了上面的过滤器示例,那么您将了解有关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页脚操作钩子。

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

我们学到了什么

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

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

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

由于网站搬家,部分链接失效,如无法下载,请联系站长!谢谢支持!
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » 一文搞懂什么是WordPress的钩子(WordPress的钩子、动作和过滤器的作用和工作原理详解)

发表回复

CAPTCHAis initialing...