WordPress是一款非常流行的blog开源php代码,本站就是使用它搭建的。

最近,越来越感觉到,之前的我,是专注于术,局限在语言或者工具层面上, 不知道算法是否属于这一层面呢?如果我还在某个安定的公司的一个大team里,这样也无所谓,可以往深入了去发展。但是目前,我需要一个人搞定一切的话,就需要更多的了解道,比如架构。所以,希望通过学习优秀的源码入手,正好手头上有wordpress,那就从这里开始吧。

但是,最开始,还要先了解wordpress的术,然后才能分析它的道。

在真正处理页面显示前,wordpress做了很多的准备工作。

首先,检查wp-config.php是否存在,如果不存在,则引导配置。wp-config.php主要是配置一些静态的数据,比如数据库、环境变量等。而wp-config.php又include了wp-setting.php,这个文件主要处理的是动态的配置。

wp-config.php可以被用户修改,而wp-setting.php则相对稳定。使用这样的加载顺序,并且在wp-setting.php中先检查if defined,就可以使用户在wp-config.php中定义的常量覆盖wp-setting.php中的值了。

看到这里,觉得有个需要注意的地方:切记,不要把函数执行与函数定义混杂在一起,这样会给阅读代码的人造成困扰。比如,在wp-setting.php先include了一堆文件,然后再执行函数,这样就比较明晰。而语言包wp-content/languages/zh_CN.php中不但有函数定义,也有函数执行,就会觉得稍显怪异。

wp-setting.php:

在源码中,大量的使用了global变量,比如wpdb数据库对象,就是作为全局变量,在wp-setting.php中初始化的。如果每一个页面都需要数据库访问的话,这样可以使用同一db连接,而且数据库方法都封装在一个对象里,也比较方便扩展,使代码更紧凑。但是,如果某些页面不需要数据库访问呢?而且这里,就有上面提到的问题,wp-include/wp-db.php中定义并初始化了wpdb对象。

继而,开始处理缓存,在没有任何外部插件的情况下,使用wp-include/cache.php初始化全局变量$wp_object_cache。wp_cache_add_global_groups和wp_cache_add_non_persistent_groups应该是设置哪些需要缓存,还不确定,继续看。

源码中有趣的是,针对一些全局对象的method,封装了function,这样调用的时候,就不用先global,再call了。

include文件default-filters.php,这里针对数据库字段,建立了一些filter规则,这样,在之后使用的时候,直接apply_filter就可以了。

wordpress成功的一个因素,是它对于plugins和theme的支持。晚上细看这一块。

Leave a Reply