WordPress插件开发教程手册 — 钩子(Hooks)

钩子是用一段代码添加/修改另外一段代码的方式,是 WordPress插件和主题与 WordPress 内核交互的基础,钩子在 WordPress 内核中也被广泛使用。WordPress 中有两种钩子,Action 和 Filter。使用钩子时,我们需要先编写一个自定义函数作为钩子的回调函数,然后使用 add_action 或 add_filter 函数将我们的回调函数挂载到指定的 Action 或 Filter 上。

Action 可以让我们在函数执行的某个时间点添加一些自定义操作(如输出内容到文章尾部),Filter 和 Action 类似,不同的是我们可以通过 Filter 修改并返回数据,因此,挂载到 Filter 上的函数会接受一些变量,并返回修改后的变量。简单来说,Action 用来添加功能,Filter 用来修改数据。

WordPress 内核提供了很多钩子,来帮助开发者开发WordPress主题或插件。通过创建自定义钩子,我们也可以让第三方开发者添加或修改我们的功能。
Action 是 WordPress 的两种钩子之一,提供了一种在 WordPress 核心、主题或插件执行的特性时间点运行附加函数的功能。Action 和 Filter 是不一样的。

添加 Action 的操作
我们可以通过两个步骤添加一个函数到某个 Action。首先,我们需要创建一个回调函数,这个函数在 Action 运行时会被调用。其次,我们需要把这个函数挂载到对应的 Action 钩子上面。使用 add_action() 函数,至少需要传递两个参数 $tag (钩子名称) 和 $function_to_add (回调函数名)。

下面的例子在 init 钩子执行时运行:

function wporg_custom() {
    // 执行某些操作
}
add_action('init', 'wporg_custom');

优先级

如果一个钩子上面挂载了多个回调函数,钩子就需要一个优先级,来确定这些回调函数的执行顺序。优先级为整数,默认值为 10,数字越小,优先级就越高。比如,优先级为 11 的函数将在优先级为 10 的函数之后执行,优先级为 9 的函数将在优先级为 10 的函数之前执行。

例如,下面的回调函数全部挂载到了 init 钩子上面,但他们有不同的优先级。

add_action('init', 'run_me_early', 9);
add_action('init', 'run_me_normal'); // 如果没有指定优先级,默认为 10
add_action('init', 'run_me_late', 11);

参数个数

有时候,回调函数需要接收一些额外的数据作为函数的参数。例如,当 WordPress 保存一篇文章时,将会运行 save_post 钩子,这个钩子会传递两个参数给回调函数:保存的文章 ID 和 文章对象:

do_action('save_post', $post->ID, $post);

所以,当我们挂载函数到 save_post 钩子时,我们可以指定它需要接收这两个参数:

add_action('save_post', 'wporg_custom', 10, 2);

然后我们就可以在回调函数中使用钩子提供的参数了。

function wporg_custom($post_id, $post){
    // 执行某些操作
}

假设我们需要在 WordPress 的前端文章查询中修改获取搜索结果的查询,我们可以使用 pre_get_posts 钩子。

function wporg_search($query) {
    if (!is_admin() && $query->is_main_query() && $query->is_search) {
        $query->set('post_type', ['post', 'movie']);
    }
}
add_action('pre_get_posts', 'wporg_search');

你可能感兴趣的:(数据库,前端,javascript)