Products
GG网络技术分享 2025-03-18 16:05 41
我们最近已经涵盖了很多 WordPress Web 开发主题,因此您可能已经听说过钩子、操作和过滤器。
这些是使用 WordPress 使用的事件驱动架构的重要组成部分。 它们是您创建自己的自定义“版本” WordPress 以满足您的需求的途径。
事件驱动架构是一种侦听改变特定状态的事件然后做出相应反应的方式。 您的反应,您所写的,是您如何创建您希望扩展 WordPress 功能的功能。
作为一个非常简单的示例,发布 WordPress 帖子是事件的示例(publish_post
) 改变状态。
这是 WordPress 可扩展性的基础,它使 CMS 成为一个如此丰富的生态系统,拥有数以千计的功能丰富的主题和插件。
使用 WordPress 钩子至关重要还有另一个根本原因。
使用钩子,您可以扩展和构建 WordPress,而无需编辑任何核心源代码。
实际上,让我重新表述一下这句话。
如果您为 WordPress 开发(或为之工作)雇用的任何人建议对 WordPress 代码进行核心更改, 当场解雇他们.
任何愿意破坏 WordPress 网站可升级性的人都不知道他们在说什么。 如果他们掌握了安全的基础知识,他们甚至不会 思考 这样做。
我们以前谈过这个。 将 WordPress(及其主题和插件)升级到最新可用版本是保护 WordPress 的基础之一。 更改核心源代码的开发人员会让您的网站坐不住了。
如果您雇用的开发人员愿意走这条危险的道路,那么他们很可能也不精通编码的基础知识。 他们很可能会对他们编写的代码造成严重破坏,让您(或您雇用的人)清理他们留下的烂摊子。
另一方面,如果您使用钩子和 WordPress 提供的所有其他可扩展性选项,则可以确保 WordPress 的可升级性。
这意味着,无论何时发布 WordPress 核心更新,将您的 WordPress 升级到最新版本都不会破坏您的任何代码。 您不必担心自己定制开发的升级。 只要钩子未被弃用,您的自定义将在升级后继续存在。
更重要的是,您的 WordPress 受到保护,免受任何已通过最新 WordPress 核心更新保护的 WordPress 安全漏洞。
钩子基本上是在执行 WordPress、主题或插件的功能期间发生的事件。
但为什么它们实际上被称为钩子?
希望扩展或实现特定功能的开发人员可以在事件发生时立即“挂钩”并执行与该事件相关的特定操作。
当 WordPress 经历其执行阶段时,它会“检查”以查看是否有任何插件(或主题)注册了要在该点执行的函数,如果找到,则在该点执行这些函数。
作为 WordPress API 文档的一部分,WordPress codex 很好地解释了 Hooks、Actions 和 Filters,但我当然是在补充这些信息。
有两种主要类型的钩子
实际上,它们可以实现的目标非常相似,但存在一些细微的差异。
在讨论差异之前,让我们先从相同之处开始。
动作和过滤器挂钩都通过许多参数接收数据。
动作和过滤器也大多能够做同样的事情(如果你不得不看一下 WordPress 源代码,你会发现实现动作的代码函数只是过滤器代码函数的包装器)。
但是,两种类型的 WordPress 钩子之间存在一个关键区别。
过滤器钩子需要返回一个值,动作钩子不需要。
本质上,使用过滤器钩子,被钩子函数获取一个特定的值,它会做它的事情,然后返回该值的修改(或未修改)版本。
动作钩子不需要返回值。
用更实际的术语来说,使用过滤器挂钩,您通常会处理内容,进行“更改”,然后返回该内容。 例如,正如我们将在下面看到的 title_save_pre
过滤器挂钩适用于帖子标题,而 content_save_pre
处理帖子的内容。
另一方面,当事件发生时,动作挂钩会做一些事情(可以处理数据或仅使用数据)。 这 publish_post
发布帖子时触发动作挂钩。
如果你想:你应该使用一个动作钩子:
添加动作钩子的方法如下:
add_action( $hook, $function_to_add, $priority, $accepted_args );
在哪里 $hook
将是您想要挂钩的动作,而 $function_to_add
是您编写的函数,将在触发该钩子时执行。
我们将在本文中进一步看到一些这样做的真实示例。
当您需要执行上述任何操作时,您可以使用过滤器,但您还希望/需要更改数据参数的值。
事实上,这不仅仅是一种需求,更是一种要求。 如果您使用过滤器挂钩,则必须为参数返回一个值。
添加过滤器挂钩的方式与添加动作挂钩的方式非常相似:
add_filter( $hook, $function_to_add, $priority, $accepted_args );
又在哪里, $hook
将是过滤钩使用和 $function_to_add
是您将要编写的函数。
删除您添加的 WordPress 挂钩非常简单。 它与添加钩子相反,语法非常相似:
remove_action( $hook, $function_to_remove, $priority);
remove_filter( $hook, $function_to_remove, $priority);
这 $priority
参数是一个可选参数。
在这两个 add_filter
和 remove_filter
案例 $prioirity
如果在同一个过滤器或操作钩子上存在多个“链接”或一个接一个运行的钩子,则确定钩子触发的顺序。
虽然我已经提到有很多 WordPress 钩子可供您使用,但到目前为止我还没有向您展示它们到底是什么。
这是您可以使用的所有过滤器挂钩的列表,由 WordPress Codex 提供,而这是所有操作挂钩的列表。 如您所见,您可以使用的 WordPress 中的功能非常广泛。
事实上,您不太可能遇到不存在挂钩的用例。
如果您确实遇到了这样的用例,您可能想为 WordPress 做出贡献,并建议将其包含在 WordPress 的未来版本中!
在撰写本文时,您可以使用超过 1900 个挂钩。
让我们看看我们如何连接它们来执行一些简单的附加功能,这些功能无法通过 WordPress 核心获得。
在本文的开头,我提到过状态更改的一个示例是 WordPress 文章的发布。
为了这个例子,我们要做的是在每个帖子的底部创建一个归属链接,这样如果有人在他们的网站锁、股票和(两个冒烟的)桶上转发我们的文章,我们至少会有一个指向我们网站的反向链接。
出于这个原因,我们将连接到 content_save_pre
过滤钩子,在将帖子内容保存到 WordPress 数据库之前对其执行。
如您所见,作为过滤器钩子,我们正在更改,然后返回内容。
另一个非常简单的过滤器,它实际上是在编辑输出。 假设,出于品牌和 SEO 的目的,您希望将公司名称附加到每个 WordPress 帖子的标题中。 无需使用 SEO 插件,或要求您的作者手动执行此操作,您可以创建一个过滤器挂钩,在访问 WordPress 标题时执行此操作。
如您所见,我们的过滤器挂钩示例再次使用 title_save_pre
对标题进行一些更改,然后将其返回。
过滤器的例子已经够多了,让我们来看几个动作钩子的例子。 正如您将看到的那样,它们的主要区别在于它们不会返回任何值。
您可能(应该)知道按下 发布 您帖子上的按钮是发布阶段的结束,但实际上是营销阶段的开始。 在推送您的内容方面,您可能希望在帖子发布后立即将内容推送到社交网络。 至少,您可能希望将它们添加到您的社交媒体营销计划中。
现在,如果您想半自动化该过程,您可以连接到 publish_post
动作挂钩并将内容发布到您的社交媒体。
我不会深入研究发布的确切代码,因为这在很大程度上取决于您想要做什么,并且互联网上有很多教程。
假设您创建了一个会员插件网站。 您还创建了许多奖励资源,您希望将它们作为与注册电子邮件不同的电子邮件发送。
我们要做的是使用 after_signup_user
动作钩子发送额外的包含奖励内容的电子邮件。
可以看出,我们实际上并没有返回任何值(因为这是一个动作钩子,而不是过滤器钩子)。
第三个论点 add_action
在上面的代码中是所谓的钩子优先级,它指定了函数钩子到 after_signup_user
将执行动作。 默认值(如果不是特定值)将设置为 10。
第四个参数表示函数钩子将接受的参数数量,默认为 1
如果为空。
仅仅因为这是在线最流行的示例之一,并不意味着它不是动作钩子的一个很好的示例!
我们正在连接到 wp_head
添加我们的 Google Analytics 代码的操作挂钩。
当然是插件和主题。 核心和自定义 WordPress 插件和主题都将公开它们自己的钩子,以便开发人员能够在不破坏主题或插件的情况下将自己的自定义功能添加到主题或插件中。
至于实际代码,可能会在 函数.php 文件,但没有实际的规范或限制过滤器应该去哪里。
如果您确信钩子的有用性,您可能希望通过钩子来使用其中的一些代码片段。
来自 WP Theme Detector 的 WordPress 有用的代码片段——其中不少实际上使用了各种 WordPress 钩子(免责声明:未经测试或认可)。
WP Kube 使用各种钩子为 WordPress 提供了更有用的代码片段。
正如您在本文中所看到的,WordPress 挂钩为您提供了扩展 WordPress 核心功能的强大功能和可能性。 这为只想对 WordPress 进行小幅调整的 WordPress 设计师、开发人员甚至自由职业者提供了强大的功能。
标签:Demand feedback