上周研究了下Wordpress的源码,虽然源码写的不够精细,我们姑且不讨论其代码是否真的如其官网所说“代码如诗”,我们比较感兴趣的是,他的框架是怎样的,他是如何实现的MVC分层,又是如何很方便的扩展插件、主题,让其他人可以简单的参与到开发中来。
我们从前台的Index.php入手,找到入口文件wp-blog-header.php文件,wp-load.php主要是一些判断和初始化工作,template-loader.php文件则主要是显示整个网站的内容。实际的初始化内容在wp-settings.php中,这个也是整个系统的核心所在。他进行了一系列的check,定义相应的类,最后加载模板文件的首页文件,交予模板文件处理。
整个系统的实现自由扩展,很大程度“依赖于执行挂钩、动作和过滤器 ”,关于这个话题可以参考官方的说明,http://codex.wordpress.org/Plugin_API,这个理解了,才能更好的把握Wordpress的东西,因为整个系统都与他有关!
WordPress 中有一种叫执行挂勾的机制,允许插件把一些功能“挂载”到 WordPress 当中。也就是说,在系统运行至某一个环节时,去调用插件内的一些函数。执行挂勾分为两种:
- 动作 (Action): 动作是 WordPress 运行到某些环节,或者在某些事件发生时,就会被执行的一种挂钩。任何的插件都可以通过动作接口来指示系统在遇到这些环节或者事件的时候,就执行指定的 PHP 函数。
- 过滤器 (Filter):过滤器的是 WordPress 用于修改即将要保存或者发送出去的数据的一种挂钩。任何的插件都可以通过过滤器接口来指示系统在遇到某些环节或者事件的时候,就执行指定的 PHP 函数去修改特定的数据。
某些时候动作或过滤器可以达到相同的效果。比如要修改文章的内容,可以把插件挂载到动作 publish_post 上,在文章的内容保存到数据库前就修改它。也可以把插件挂载到过滤器 the_content 上,在文章的内容发送到浏览器前修改它。