wordpress源代码研究-插件机制

先前说过WP所有的处理都在index.php里,单入口。而这里面又分成了两步。一个是数据的准备,第二是模板的加载。那我们的插件调用是在哪里 呢??可以这么说,插件需要的数据是在第一…

先前说过WP所有的处理都在index.php里,单入口。而这里面又分成了两步。一个是数据的准备,第二是模板的加载。那我们的插件调用是在哪里 呢??可以这么说,插件需要的数据是在第一步准备好的,插件的调用机制也是在第一步初始化的,并且一部分的接口调用也是在第一步做了。然后第二部主要是就 是在特定的地方调用接口的方法。

其实所谓的插件,说白了就是一堆函数,写插件的作者希望这一堆函数能在WP运行流程的一些地方插进去运行。比如我们希望一个关键词过滤的东西,每遇 到“草泥马”你换成“***”。那就可以写一个插件,在每一次日志提交的时候,在入库之前让执行一个函数,让这个$content中的“草泥马”你换成 “***”。这就是插件。

那为什么我们不直接改源代码就行了呢,反正是开源的。这个问题,我觉得原因有两点。

1.开源没错,但是我为了一个小功能要看全部源代码,是不是有点。。。

2.你改了源代码你用,别人要用你再教他怎么怎么改。是不是有点。。。再如果对方不懂程序,OMG。

所以最好是写成一个东西,傻瓜都会用的那种。这时候插件就出现了。

可能你还会想,那我写一个执行脚本,让他在指定的文件指定的行添加一些代码,不也“插件”了吗。

没错,这样肯定也能成功。不过如果其它人也有其它的插件,大家都要改文件,那是不是可能出现冲突,不河蟹了是吧。

上面用插件的原因你了不了解都无所谓。下面要说的是插件的具体实现。

WP中用一种叫hook的机制实现了插件,hook:钩子是也。也就是在指定的地方放一些钩子,然后你可以把你的代码写成函数,挂在某些钩子上,当程序执行到钩子的时候,就把那上面的一串函数给执行了。

那这个挂的动作是什么时候发生的呢?是怎么发生的呢?

当我们在执行上面说的wp-settiongs.php的时候,里面包含了我们每个插件的一个引导文件(就是一个PHP文件),在这个文件里调用了 一些方法,比如:add_action(“钩子”,”函数”)。比如apply_filter(“钩子”,”函数”)..当然还有相应的删除,修改什么的 一系列函数。你可以随便打开一个插件的外层PHP文件看一下里面的这些代码。

这些代码什么意思呢。他们其实是描述了一个对应关系,就是一个钩子对应一些函数的对应关系,每调用一次上面的挂钩函数。就会让这个钩子上多关联一个函数。其实这所有的信息就是存在PHP的关联数组里的。可以想一下是怎么存的,我这就不说了。是时候看看代码了吧。呵呵。

然后这样的一个全局变量被初始化了,在后面具体执行到一些钩子的时候,函数就被执行了。具体就是这样实现的。不神奇是吧。只是确实很管用。

不好地的方就是每次干什么事都会做这种初始化,不管你用不用得到。他都会被准备好。

所以WP才这么慢。有兴趣的朋友可以试着var_dump一下PHP的$GLOBALS,数据量那是相当相当相当惊人,如果机器不太好的话,可能会让你的浏览器卡死。

作者: admin

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi vitae.

为您推荐

联系我们

联系我们

返回顶部