WordPress 5.2 中最令人兴奋的新特性之一是引入的 一个简单的动作钩子—— wp_body_open
。 对于主题或者插件开发者来说 ,这个简单的钩子对在主题中插入代码有巨大的影响。
背景
当 WordPress 开发者想要在前端页面插入 Google Analytics 脚本或者其他自定义脚本时,可以使用wp_head()
或者wp_footer()
函数,这两个超级有用的函数可以让开发者使用非常简单的语法在主题中轻松的插入代码:
<?php
/**
* 使用 wp_head 函数
*
* @author 智慧宫
* @link https://lerm.net
*/
function custom_code() {
return '<!-- some code -->';
}
add_action('wp_head', 'custom_code');
wp_head()
函数在WordPress 1.2 中引入,这个函数可以执行 wp_head
动作钩子,从而在<head>
标签中插入代码,同样, wp_footer()
函数在WordPress 1.5.1中引入,这个函数可以在<body>
标签结尾之前插入代码。
但是到目前为止,没有统一的函数可以在 <body>
标签 开头插入代码,这是 WordPress 非常大的一个缺点,因为开发者为了在<body>
标签开头插入代码需要自己注册很多函数。
新主体结构
在WordPress 5.2 中引入了 wp_body_open()
函数可以激活 wp_body_open
动作钩子,这个函数允许开发者在 <body>
标签 开头插入自定义的代码; 目前,所有WordPress 默认主题的header.php
文件中都使用了 wp_body_open()
函数,WordPress 5.2 以后的主题结构如下:
<?php
/**
* WordPress 5.2 主题结构
*
* @author 智慧宫
* @link https://lerm.net
*/
?>
<html>
<head>
..
<?php wp_head(); ?>
</head>
<body>
<?php wp_body_open(); ?>
..
<?php wp_footer(); ?>
</body>
</html>
升级主题
作为 WordPress 主题开发者,您应该在您的主题中引入这个最新的函数。
注:如果在您的主题中有多个<body>
标签,应根据主题结构在<body>
后面插入 wp_body_open()
函数。
兼容性
在使用这个新函数时主题开发人员可能会遇到以下的两个问题,以及我们应该如何做。
旧版本WordPress
如果主题开发者想在 WordPress 的 header.php
文件中插入 wp_body_open()
函数完全没有问题,但是如果一个网站使用了旧版本的 WordPress,就会引起致命的错误,因为你不能调用一个没有被定义的函数。
对于上面的问题,最简单的办法就是将 WordPress 更新到 WordPress 5.2 以上,但是这样做对老版本的 WordPress 并很好没有兼容性。
为了在 WordPress 5.2 以前的版本中使用这个新的函数的和动作钩子,你必须自己注册一个 wp_body_open()
函数而不引起错误,同时保证兼容性。代码如下:
<?php
/**
* 注册 wp_body_open 函数来向后兼容
*
* @author 智慧宫
* @link https://lerm.net
*/
if ( ! function_exists( 'wp_body_open' ) ) {
/**
* Fire the wp_body_open action.
*
* Added for backwards compatibility to support WordPress versions prior to 5.2.0.
*/
function wp_body_open() {
/**
* Triggered after the opening <body> tag.
*/
do_action( 'wp_body_open' );
}
}
自定义主题钩子
其实在这个全新的函数引入之前,许多主题使用了自定义的函数在<body>
标签开始时插入代码,现在,这些主题应当考虑迁移到 wp_body_open()
函数。为了向后兼容,主题开发者可以首先使用if
判断wp_body_open
动作钩子是否被激活,如果返回true
那就使用这个钩子,如果返回false
那就使用自定义的钩子,代码如下:
<?php
/**
* 自定义主题钩子
*
* @author 智慧宫
* @link https://lerm.net
*/
function custom_code() {
return '<!-- some code -->';
}
if ( did_action( 'wp_body_open' ) ) {
add_action( 'wp_body_open', 'custom_code' );
} else {
add_action( 'custom_theme_hook', 'custom_code' );
}
令人兴奋的变化
WordPress 的前途非常光明,越来越多的新特性被引入,这使主题开发过程变得越来越简单。如果你知道更多的新函数、动作钩子、过滤钩子,可以在下面评论中留言告诉大家。(viaGenerateWP)
终于有人讲明白了wp_body_open的意思,还有用法,非常赞💯
终于有人讲明白了wp_body_open的意思,还有用法,非常赞💯