首先这是一个比较深的问题,一般情况下用不到,但是一些很特殊的情况下需要用到,如果用到了,这篇文章就对你有很大的帮助。下面开始教程:
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。
温馨提示:本站部分付费下载资源收取的费用为资源收集整理费用,并非资源费用,不对下载的资源提供任何技术支持及售后服务。