您现在的位置是:首页 > cms教程 > WordPress教程WordPress教程
WordPress的HOOK机制原理代码分析
慕青2025-03-19 14:44:36WordPress教程已有5人查阅
导读WordPress强大的插件机制让我们可以自由扩展功能。网上对插件的使用以及开发方法都有大量资料可以查询。今天我们就分析一下四个主要函数的代码,包括:
WordPress强大的插件机制让我们可以自由扩展功能。网上对插件的使用以及开发方法都有大量资料可以查询。
今天我们就分析一下四个主要函数的代码,包括:
add_action、do_action、add_filter、apply_action。
一、add_action和add_filter
为什么把这两个函数放在一起讲呢?其实我们看看add_action函数的定义(图一)就可以知道,其实跟add_filter是同一个函数,执行的是相同的操作。只是把action和filter区分开,让开发者能更好地开发插件而设置的。 现在我们再看看add_filter的函数定义: 函数的第一行就是定义$wp_filter和$merged_filters。$wp_filter是一个多维数组,保存了目前所有的已注册在挂钩上的函数的信息。把它扩展开可以看到这样子的结构:
这里我们以两个挂钩作为例子来讲解。很明显它的结构是这样子的: 那么$merged_filter是什么呢?其实在这个函数里并没有体现出它的作用。但是如果我们结合do_action函数里的代码。 我们可以知道,当相应的挂钩下的函数被调用的时候,它会对这些函数进行优先级排序,当排完序的时候,$merged_filters下对应的函数就 会被设置为true。而当我们在相应挂钩下添加一个函数的时候,它在$merged_filters数组下的值会被删除。说白了,它就是一个标识,用来说 明这个标识下的函数是否已经经过优先级排序。
我们继续分析代码。 这句代码里的函数我们就不展开去读了,我们只需要知道它返回的是下面这部分的内容就行了。 接下来的这句代码也很简单,就是把函数配置到挂钩上面去而已。 因为这里插入了一条函数,可能改变了它下面的函数的执行优先级,所以这里的标识要删除。 二、do_action
函数定义: 第一条语句定义了几个全局函数:$wp_filter,$merged_filters,$wp_actions,$wp_current_filter。
前两个变量在前面已经做了说明了,$wp_actions是记录action被调用的次数,$wp_current_filter是记录当前使用的action的信息,它是一个堆栈结构,当出现递归调用的时候就非常有用了。
系统会先记录这个action的调用次数。然后再把当前调用的挂钩记录起来。查找有没有通用的挂钩函数,有的话就执行。接着检查有没有指定的挂钩函数,没有的话就把$wp_current_filter里相应的元素弹出,并把跳出函数返回。
如果挂钩下有相应的函数的话,那么先把要传递给函数的参数放到数组里面,再进行优先级排序,之后再一一执行。之后还是要把$wp_current_filter里相应的元素弹出。
三、apply_filter
函数定义: 仔细一看,你会发现它的代码跟do_action差不多。是的!它跟do_action有几点区别:
1、它并不记录该挂钩运行的次数。
2、由于它传入的都是一个字符串类型的参数,所以它的参数存储比较简单。
3、处理完所有函数后,会把最终处理结果返回。
reference from : http://caord.ynot.cn/?p=467
今天我们就分析一下四个主要函数的代码,包括:
add_action、do_action、add_filter、apply_action。
一、add_action和add_filter
为什么把这两个函数放在一起讲呢?其实我们看看add_action函数的定义(图一)就可以知道,其实跟add_filter是同一个函数,执行的是相同的操作。只是把action和filter区分开,让开发者能更好地开发插件而设置的。 现在我们再看看add_filter的函数定义: 函数的第一行就是定义$wp_filter和$merged_filters。$wp_filter是一个多维数组,保存了目前所有的已注册在挂钩上的函数的信息。把它扩展开可以看到这样子的结构:
这里我们以两个挂钩作为例子来讲解。很明显它的结构是这样子的: 那么$merged_filter是什么呢?其实在这个函数里并没有体现出它的作用。但是如果我们结合do_action函数里的代码。 我们可以知道,当相应的挂钩下的函数被调用的时候,它会对这些函数进行优先级排序,当排完序的时候,$merged_filters下对应的函数就 会被设置为true。而当我们在相应挂钩下添加一个函数的时候,它在$merged_filters数组下的值会被删除。说白了,它就是一个标识,用来说 明这个标识下的函数是否已经经过优先级排序。
我们继续分析代码。 这句代码里的函数我们就不展开去读了,我们只需要知道它返回的是下面这部分的内容就行了。 接下来的这句代码也很简单,就是把函数配置到挂钩上面去而已。 因为这里插入了一条函数,可能改变了它下面的函数的执行优先级,所以这里的标识要删除。 二、do_action
函数定义: 第一条语句定义了几个全局函数:$wp_filter,$merged_filters,$wp_actions,$wp_current_filter。
前两个变量在前面已经做了说明了,$wp_actions是记录action被调用的次数,$wp_current_filter是记录当前使用的action的信息,它是一个堆栈结构,当出现递归调用的时候就非常有用了。
系统会先记录这个action的调用次数。然后再把当前调用的挂钩记录起来。查找有没有通用的挂钩函数,有的话就执行。接着检查有没有指定的挂钩函数,没有的话就把$wp_current_filter里相应的元素弹出,并把跳出函数返回。
如果挂钩下有相应的函数的话,那么先把要传递给函数的参数放到数组里面,再进行优先级排序,之后再一一执行。之后还是要把$wp_current_filter里相应的元素弹出。
三、apply_filter
函数定义: 仔细一看,你会发现它的代码跟do_action差不多。是的!它跟do_action有几点区别:
1、它并不记录该挂钩运行的次数。
2、由于它传入的都是一个字符串类型的参数,所以它的参数存储比较简单。
3、处理完所有函数后,会把最终处理结果返回。
reference from : http://caord.ynot.cn/?p=467
本文标签:
很赞哦! (0)
暂无内容 |
暂无内容 |
暂无内容 |
暂无内容 |
随机图文
WordPress日期和时间调用函数the_time使用方法
the_time WordPress日期和时间调用函数怎么用?the_time WordPress日期和时间调用函数,使用wordpress的朋友可以参考下。Centos7.4用Docker-Compose部署WordPress步骤教程
本博客搭建环境(阿里云ECS的购买与基本的安全组配置等工作在文中省略,各位看官可自行研究):阿里云ECSCentos 7.4部署工具:Docker Compose(Compose工具比起单纯的Dockerfwordpress安装步骤教程
1、前提已经安装好lnmp 测试连接mysql没有问题;lnmp安装请参照 python篇 一键安装lnmp2、创建wordpress数据库3、下载wordpress安装包4、添加nginx配置文件5、安装wordpresskali环境Wpscan渗透Wordpress的方法
一、什么是Wpscan?什么是Wordpres?1.WpscanWPScan是一款针对wordpress的安全扫描软件;可以扫描出wordpress的版本,主题,插件,后台用户以及爆破后台用户密码等。
留言与评论 (共有 0 条评论) |