很多 WordPress 初学者可能会问一个问题:什么是 WordPress Hook,它们有什么用?
WordPress 是一个高度可定制的 CMS,允许用户根据自己的规范进行更改。一些用户仅使用外观功能自定义他们的 WordPress 网站,而其他用户则使用 WordPress Hooks 添加自定义功能。
目录
- 什么是 WordPress 挂钩?
- 动作挂钩
- 过滤器挂钩
- 如何使用 WordPress Hook?
- 动作挂钩示例
- 过滤器挂钩示例
在本指南中,我将解释 WordPress 中的钩子以及如何使用它们来修改或创建 WordPress 中的特定功能。
什么是 WordPress 挂钩?
WordPress Codex 将挂钩定义为 WordPress 主题和插件与 WordPress 核心交互的桥梁。钩子的功能允许开发人员将他们的自定义代码与 WordPress 核心中存在的默认函数连接起来。
可以肯定地说,挂钩是自定义 PHP 函数,可以使用或挂钩来更改默认的 WordPress 行为,而不会影响核心文件。 Hooks 允许 WordPress 与plugins 和functions.php 文件中存在的自定义代码进行交互。
挂钩有两种类型;操作挂钩和过滤器挂钩。
动作挂钩
操作挂钩在特定时间执行以执行特定任务,例如显示输出或向数据库添加数据。操作挂钩不返回任何值,它们仅在被调用时执行特定任务。
例如;每当创建新类别时, create_category函数就会运行,并且不会返回任何内容。
过滤器挂钩
另一方面,过滤器挂钩允许您在 WordPress 执行期间更改数据。连接到过滤器的函数接受变量并返回一个值。有些过滤器还接受多个参数。
例如; add_filter('the_title', 'strrev');接受字符串作为参数并返回该字符串的反转。
过滤器用于处理特定任务,它们可以修改数据并始终在最后返回一些内容。
如何使用 WordPress Hook?
现在我们已经了解了 WordPress 挂钩的基本概念,让我们继续看看操作和过滤器的实际效果。
动作挂钩示例
有超过 200 个可用的钩子,因此覆盖所有钩子并不是一个好主意。不过,为了帮助您入门,我将向您展示一个简单的示例,然后解释我所做的事情。
示例 1:管理区域中的自定义菜单
1234 个功能 自定义菜单( ) { 添加菜单页( '自定义菜单标题' , '自定义菜单' , '管理选项' , 'testplugin/testplugin-admin.php' , '' , 'dashicons-admin-site' , 6 ) ; }添加动作( '管理菜单' , '自定义菜单' ) ;
让我们逐行检查上面的代码。
在代码的第一行中,我为我的函数命名了。在第二行中,我调用另一个函数,其中包含一些参数。最后,我将自定义函数附加到“admin_menu”的操作挂钩,每当生成管理菜单时,它将运行我的函数。
示例 2:在标题后添加自定义文本
12345678 // 在 header函数后添加自定义文本 添加自定义文本( ) { 如果 ( ! is_front_page ( ) ) 返回; // 回显 html 回声 "<div>享受夏季特别折扣 20%</div>" ; }添加动作( '__after_header' , '添加自定义文本' ) ;
在上面的代码中,如果当前页面不是主页,则该函数将不会显示自定义文本。这基本上意味着自定义文本只会显示在您网站的主页上。
在代码片段的末尾,我将自定义代码附加到操作挂钩'__after_header' 。
同样,您可以尝试其他操作挂钩并创建自定义功能。
过滤器挂钩示例
与操作挂钩不同,过滤器接受参数并返回一个值。让我们看一下示例并了解如何使用它们。
示例 1:更改摘录长度
1234功能 摘录长度示例( $字数 ) { 返回 15 ; }添加过滤器( '摘录长度' , '摘录长度示例' ) ;
在上面的代码中,我利用了 WordPress 过滤器“excerpt_length”之一,并将其与我的自定义代码挂钩,该代码为我的新摘录长度返回数值 15。
示例 2:更改标题
第12345章 更改标题( $标题) {返回 '着迷:' 。 $标题; }添加过滤器( '标题' , '更改标题' ) ;
在这个简单的示例中,我只是定义了一个用于更改帖子标题的自定义函数。后来,我将它连接到过滤器'the_title' 。
包起来!
WordPress 挂钩对于将自定义功能与 WordPress 的核心功能连接起来非常有用。在本指南中,我们了解了 Action 和 Filter 挂钩的不同之处,以及如何在 WordPress 网站内的不同位置使用它们。
如果您有任何疑问,或者您对本文中的任何概念感到困惑,请在下面的评论部分告诉我,我会回复您!
RSS