[WordPress 日记] 第1天 勾点 Hook 初探

前言

30 天 WordPress 笔记系列,主要是为了让自己习惯每天产出新的内容开始的小计划。每篇篇幅并不会相同,会根据自己的忙碌状态做调整。

图片[1]-[WordPress 日记] 第1天 勾点 Hook 初探-59爱分享

为什么要理解 hook?

原因很简单:hook(以下称为「钩点」)是 WordPress 之所以能够成为市占率最高 CMS(内容管理系统)的原因。

在一开始接触 WordPress 时,可能会听过 WordPress 的强项在于「可以通过插件或主题的方式,为 WordPress 提供进阶的客制化功能。」而这些进阶的客制化功能,则是通过 钩点参与整个 WordPress 网站载入的过程。

即使你并没有打算成为插件或主题的开发者,了解钩点的运作机制,不论是在调试的时候,或是「不想要安装太多插件」时,都可以帮助你达到想要的目的。在后续举的两个例子,就是通过 hook 的方式,去完成平常需要通过插件进行的设置。

什么是钩点?

钩点就是在特定的网页流程,找出对应的工具,并输出对应的结果。

关于钩点的详细介绍,可以参考 Audi 的《WordPress的Hook机制与原理》一文,本文将根据目前官方的开发人员文件,针对(我自己)常用的钩点进行解说。但为了使读者们更便于了解后续内容,这里会先简单介绍两种钩点:filters(以下称为「筛选器」)与 actions(以下称为「动作」)。

筛选器与动作

根据 WordPress Codex 的定义,动作指的是「在 WordPress 事件发生时,同时触发特定函数 (functions)」,而筛选器指的是「在 WordPress 将数据于数据库与浏览器间传递的过程中,筛选特定数据并返回已经过转换的值」。

用情境来理解的话,动作是「WordPress 正在 OOO,这时候我也 XXX」,例如:「WordPress 正在载入标头 (header) 内容,我想要在这时候执行 my_enqueue_style 这项工作,以载入 /path/to/style.css 文件」用动作的写法就会是:

<?php
add_action( 'wp_head', 'my_enqueue_style' );
function my_enqueue_style () {
    wp_enqueue_style( 'my-style', '/path/to/style.css' );
}

 

而筛选器则是「现在 WordPress 正要输出/输入 OOO,但我想先 XXX」,例如:「WordPress 正要输出 CSS 和 JavaScript 的元素,但我想先移除文件的版本信息」。使用筛选器的写法如下:

php
function remove_version_query($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'remove_version_query', 999);
add_filter('script_loader_src', 'remove_version_query', 999);

 

(备注:上述代码片段引自开源项目 Work with WordPress)

两者最大的差异在于筛选器是介于浏览器(前端)与数据库(后端)将数据进行筛选、改写的过程中,因此必然需要使用 return 返回值,否则就会出现“进有无出”的情况。而动作则是执行特定函数的功能,这些功能并不一定需要返回值。

了解了筛选器和动作之后,这里来记录一下我自己常用的钩子(Hooks)。

常用的钩子

名称 类型 功能
wp_enqueue_scripts action WordPress 开始引入 CSS、JS 文件时的动作。
wp_head action 所有会在 wp_head() 执行时的动作,包含载入页面中元数据(meta)、引入 CSS、JS 文件等。
the_post action 在 WordPress 完成文章查询请求后的动作。
wp_footer action 所有会在 wp_footer() 执行时的动作,例如载入定制的 JavaScript 等。
body_class filter 在导出 body 元素的 CSS 类型时进行筛选、改写。
get_the_excerpt filter 在获取文章内容摘要时进行筛选、改写。可用于自定义文章内容摘要长度时。
manage_posts_columns filter 在各文章类型(post type)的管理页面中,显示特定字段时使用。

完整的钩子信息可以参考 WordPress Codex 中的《Plugin API/Action Reference》与《Plugin API/Filter Reference》。

小结

以上是针对钩子概念的介绍。如前所述,学习钩子的主要好处在于理解 WordPress 插件与主题的运作机制。对于那些希望避免安装过多插件的人来说,这是一项非常重要的技能。

然而,一旦掌握了钩子的概念,接下来应该如何使用呢?大多数在线教程会建议你“将这些代码复制粘贴到当前主题的 functions.php 文件中”。然而,这种做法存在相当大的风险:“当主题更新后,你所做的修改可能会丢失。”

因此,本系列的下一篇文章将介绍 WordPress 定制中非常重要的概念:子主题(Child Themes)。

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容