如何在回调函数中获取 WordPress 接口的当前优先级

如何在回调函数中获取 WordPress 接口的当前优先级:首先这是一个比较深的问题,一般情况下用不到,但是一些很特殊的情况下需要用到,如果用到了,这篇文章就对你有很大的帮助。下面开始教程:

首先这是一个比较深的问题,一般情况下用不到,但是一些很特殊的情况下需要用到,如果用到了,这篇文章就对你有很大的帮助。下面开始教程:

我们在 WordPress 进行开发的时候,肯定会使用到 WordPress 的 Hook,通过 add_filter 或者 add_action 把某个回调函数传递给某个 Hook 接口,比如:
add_filter('content_save_pre', 'wpjam_filter_content_save_pre', 10, 1);

上面的代码就是在保存内容之前,使用回调函数 wpjam_filter_content_save_pre 对内容保存到数据库之前进行预处理,然后还有两个参数,分别是优先级和定义回调参数的个数。

在回调函数中,我们可以通过 current_filter 函数可以获取当前回调函数是在执行那个 Hook 中,但是如果要获取当前回调函数优先级,WordPress 就没有相关的函数了,所以我自己写了一个:

function wpjam_get_current_priority($name=null){
	$name	= $name ?: current_filter();
	$hook	= $GLOBALS['wp_filter'][$name] ?? null;

	return $hook ? $hook->current_priority() : null;
}

获取 Hook 优先级有什么用

我们可能要移除接口的某个回调函数,然后最后又要加回来,怎么处理呢?在要移除的回调函数的优先级之前定义一个相同接口的回调函数移除,在要移除的回调函数的优先级之后定义一个相同接口的回调函数加回来。

如果和我一样为了偷懒,这前后的移除和添加的回调函数是同一个,那就要在回调函数中判断当前的优先级了:

function wpjam_filter_content_save_pre($content){
	if($content && is_serialized($content)){ // 确保是序列化的内容
		$var 		= 'content_save_pre_filter_removed';
		$hook_name	= 'content_save_pre';
		$callback	= 'wp_filter_post_kses';
		$priority	= wpjam_get_current_priority($hook_name);

		if($priority < 10){ // 之前移除 wp_filter_post_kses 这个回调函数
			if(has_filter($hook_name, $callback)){
				remove_filter($hook_name, $callback);

				wpjam_set_current_var($var, true);
			}
		}else{ // 之后加回 wp_filter_post_kses 这个回调函数
			if(wpjam_get_current_var($var)){ // 确保是真实移除的才加
				add_filter($hook_name, $callback);

				wpjam_set_current_var($var, false);
			}
		}
	}

	return $content;
}

add_filter('content_save_pre',	'wpjam_filter_content_save_pre', 1);
add_filter('content_save_pre',	'wpjam_filter_content_save_pre', 11);

上面的代码就是如果存储的 WordPress 内容是被序列化的,就移除接口 content_save_pre wp_filter_post_kses 的回到函数,并且在之后加回,防止其他非序列化的内容保存的时候也不执行 wp_filter_post_kses 回调。

免责说明

本站资源部分来自网友投稿,如有侵犯你的权益请联系管理员或给邮箱发送邮件PubwinSoft@foxmail.com 我们会第一时间进行审核删除。
站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!


如果遇到评论下载的文章,评论后刷新页面点击对应的蓝字按钮即可跳转到下载页面
本站资源少部分采用7z压缩,为防止有人压缩软件不支持7z格式,7z解压,建议下载7-zip,zip、rar解压,建议下载WinRAR

温馨提示:本站部分付费下载资源收取的费用为资源收集整理费用,并非资源费用,不对下载的资源提供任何技术支持及售后服务。

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WordPress彻底去除后台版权方法

2023-3-28 15:03:25

WordPress教程

7B2 Pro主题的优化:WordPress轻社交购物主题

2023-3-30 15:51:43

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索