WordPress行动钩子


WordPress Hooks系统使WordPress具有如此大的可扩展性,它允许你在WordPress的基础上构建任何东西,从博客到在线电子商务平台。

在这节课中,您将了解动作钩子,它们如何工作,如何选择正确的钩子,以及如何在代码中使用它们。

学习成果

  1. 理解动作钩子和过滤器钩子之间的区别。
  2. 注册一个动作钩子回调函数。
  3. 更新动作钩子回调优先级。
  4. 使用钩子回调接受的参数。

理解问题

  1. 动作钩子和过滤器钩子的区别是什么?
  2. 什么函数被用来在一个已有的动作钩子上注册一个动作回调函数?
  3. 哪个参数影响动作钩子回调的运行?
  4. 哪个参数影响传递给钩子回调的变量的数量?

资源

成绩单

大家好,欢迎来到学习WordPress。

今天我们将学习一个叫做Action hooks的WordPress开发概念。

在本视频中,我们将简要介绍钩子,钩子的两种类型:动作和过滤器,动作是什么以及如何使用它们,动作钩子的优先级和参数参数,以及动作钩子的顺序。

钩子允许你的主题或插件代码在特定的预定义点与WordPress请求交互或修改其执行。hook使WordPress具有如此大的可扩展性,并允许您在WordPress的基础上构建任何东西,从博客到在线电子商务平台。

有两种类型的钩子,动作钩子和过滤器钩子。它们通常被称为动作和过滤器。在这个视频中,我们将关注动作,但查看过滤器视频获得更多关于过滤器挂钩的信息。

正如名称所示,操作允许您在特定点执行某些操作。为了更好地解释这一点,让我们看一个例子。

如果您开发WordPress主题,您需要完成的一个常见活动是决定支持哪种文章格式,然后在您的主题中启用对它们的支持。为此,文档指出需要使用add_theme_support函数,并建议通过after_setup_theme动作钩子注册该函数。让我们转到WordPress代码中第一次定义这个钩子的地方,它目前在wp-settings.php文件的第576行。

这里,do_action函数用钩子名after_setup_theme定义动作钩子。我们还可以在文档中阅读关于这个钩子的更多信息。

这里我们看到,这个钩子在主题初始化后的每个页面加载过程中被触发,并用于为主题执行基本的设置、注册和初始化操作。为了使用操作,您需要将代码中的函数注册到预先存在的操作钩子,这称为回调函数。要在一个动作上注册回调函数,你需要使用add_action函数。您需要将钩子名和回调函数名作为参数传递给add_action函数。让我们看看这在themes functions.php文件中是什么样子的。

首先,我们使用add_action,并传入动作钩子名。然后我们定义回调函数。接下来,创建回调函数并添加对所选文章格式的支持。在本例中,我将从文档中复制post格式。函数,learn_setup_theme,让我们打开文档,获取文章格式。

你可以给回调函数起任何你想要的名字,但是用一个唯一的前缀来创建它总是一个好主意。在本例中,我使用wp_learn。如果你现在在你的WordPress仪表板上创建一个帖子,你会看到帖子格式选择框出现在块编辑器中。您还可以选择所需的帖子格式。您可以看到您在回调函数中启用的两种发布格式:aside和gallery。

正如您在注册操作时所看到的,您使用操作来执行某些操作,或者启用一些已经存在的特性,或者向代码执行中添加一些内容。

现在让我们谈谈钩子优先级。如果您查看add_action的文档,您将在钩子名称和回调函数之后看到两个附加的函数参数。第三个参数是钩子优先级,它是一个整数,默认值为10。这意味着,如果您在代码中注册一个操作而没有指定优先级,那么它将以10的优先级注册。

钩子优先级允许你确定你的钩子回调相对于任何其他可能注册在给定钩子上的钩子回调的运行顺序,无论是WordPress核心,还是其他主题和插件。雷竞技钩子按照优先级从1开始的数字顺序运行。通常情况下,将优先级保留为默认值10是安全的,除非你特别想改变回调函数的运行顺序。

例如,在我们的after_setup_theme动作示例中,你可能想要确保注册的回调函数只在WordPress Core运行注册的任何回调函数之后运行。因为WordPress Core注册任何钩子回调的默认优先级都是10。如果指定优先级为11,则可以确保在完成任何核心回调函数后运行回调函数。

或者,如果你想确保回调在WordPress核心之前运行,你可以设置一个较低的优先级,比如9。通常,您可能会看到回调被注册为高优先级,如99或9999。这是因为插件或主题开发人员希望确保这个回调函数在所有其他回调函数之后运行。然而,我们永远无法确定其他第三方插件或主题会以什么优先级注册它们的回调。雷竞技

add_action函数中的第四个参数是回调函数可以接受的实参数量。

为了更好地理解这是如何工作的,让我们看一下save_post动作钩子。这个钩子在wp_insert_post函数内部的wp-includes-post文件中定义,wp_insert_post是一个管理函数,用于添加或更新WordPress帖子或页面。在这个函数的底部,我们看到了下面的代码段。在这里,do_action函数用与动作相关的三个变量注册动作钩子:post id、post对象和update布尔变量。

在使用do_action定义动作钩子时,可以添加任意数量的可能参数。然而,传递给接受的参数参数的数量决定了传递给钩子回调函数的参数数量。如果您查看add_action的文档,您将看到接受的参数数量的默认值是1,这意味着您不必为该参数指定值。第一个参数可传递给回调函数。在save_post操作中,有三个可能被接受的变量。如果注册回调函数时没有设置参数的数量,则只有第一个参数对回调函数可用。在本例中,是邮件ID。让我们看看这是什么样子的。

这里我没有指定可接受参数的数量。所以第一个总是会被通过。为了接受更多的可用参数,您需要指定要接受的参数数量。

然后你可以在回调函数中使用这些参数。

为了方便起见,我把它们从定义中复制过来。

能够确定回调函数需要哪些参数,然后在钩子注册中设置数字是一项很有价值的技能。例如,假设您想使用update_post_meta函数将一篇文章的保存日期保存为该文章的元数据,您可能只需要文章ID。

然后我们的update_post_meta函数看起来像这样。

但是,如果您想在文章更新时这样做呢?在本例中,钩子有update变量,如果正在更新post,那么wp_insert_post代码将设置为true。因此,您需要更新回调,以接受来自钩子的所有三个参数,并在代码中使用update变量。我要更新参数的数量然后我要从动作注册中获取变量。然后我可以使用update变量。这样,如果update为true,只有这样post元才会被更新。

您会注意到,我对传递给回调的参数使用了相同的变量名,在本例中是post id、post和update。这不是必需的,在注册回调函数时,您可以任意调用它们。但是如果命名相同的话就更容易记住每个变量是什么了。

根据您的具体需求,您可能首先需要确定使用哪个操作是正确的。幸运的是,WordPress Codex有一个动作参考,这是一个在WordPress中可用的动作钩子的列表,以及它们在WordPress站点上不同请求时的运行顺序。

这篇关于WordPress动作钩子的教程到此结束。下次见。

车间细节


主持人

乔纳森Bossenger
@psykro

Automattic的WordPress代码教练,培训团队的全职赞助成员,为学习WordPress的开发人员创建教育内容。丈夫,两个精力充沛的儿子的父亲。