最近突然想研究下传说中的WP,看了网上一些高手写的博客,觉得不错就是比较凌乱,决定加入自己的一些理解整合在一起,也作为自己学习的一个记录。
版本:WordPress 3.6.1
开发环境:php version : 5.4.7
apache : Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
System : Windows 7 Ultimate Edition Service Pack 1
WP是单一入口程序:
index.php -> wp-blog-header.php -> wp-load.php -> wp-config.php -> wp-settings.php
-> wp()
-> template-loader.php
WP调用关系如下图:
index.php
入口文件
1 <?php 2 /** 3 * Front to the WordPress application. This file doesn't do anything, but loads 4 * wp-blog-header.php which does and tells WordPress to load the theme. 5 * 6 * @package WordPress 7 */ 8 9 /** 10 * Tells WordPress to load the WordPress theme and output it. 11 * 12 * @var bool 13 */ 14 //该常量定义为false时,不使用主题,站点会显示为空白,为true时,则正常显示。 15 define('WP_USE_THEMES', true); 16 17 /** Loads the WordPress Environment and Template */ 18 require('./wp-blog-header.php');
wp-blog-header.php
ok,let's see ya .
有一个变量 $wp_did_header 它的存在有什么用? 先空着!
wp-blog-header.php这个文件是加载 WP的环境和模板的
QUOTE:
wordpress可以分为3个阶段:
一是初始化阶段,即初始化常量、环境、加载核心文件等等;
二是内容处理阶段,即根据用户的请求调用相关函数获取和处理数据,为前端展示准备数据;
三是主题应用阶段,在这个阶段,需要展示的数据已经准备完毕,需要根据用户的请求加载相应的主题模板,即对主题进行路由。
经过这三各阶段,用户请求的页面就可以完全的展现出来了。
- wp-load.php 初始化阶段,加载wp_load.php文件
- wp() 内容处理阶段 wp()->wp-includes/functions.php
- template-loader.php 主题应用阶段
1 <?php 2 /** 3 * Loads the WordPress environment and template. 4 * 5 * @package WordPress 6 */ 7 8 //wp_did_header变量,相当于一个flag,确保每次刷新时,wp-blog-header.php文件只执行一次。 9 if ( !isset($wp_did_header) ) { 10 11 $wp_did_header = true; 12 13 require_once( dirname(__FILE__) . '/wp-load.php' ); 14 15 wp(); 16 17 require_once( ABSPATH . WPINC . '/template-loader.php' ); 18 19 }
wp_load.php
如果找不到wp-config.php文件,则会提示错误信息,要求用户设置wp-config.php文件。
1 <?php 2 /** 3 * Bootstrap file for setting the ABSPATH constant 4 * and loading the wp-config.php file. The wp-config.php 5 * file will then load the wp-settings.php file, which 6 * will then set up the WordPress environment. 7 * 8 * If the wp-config.php file is not found then an error 9 * will be displayed asking the visitor to set up the 10 * wp-config.php file. 11 * 12 * Will also search for wp-config.php in WordPress' parent 13 * directory to allow the WordPress directory to remain 14 * untouched. 15 * 16 * @internal This file must be parsable by PHP4. 17 * 18 * @package WordPress 19 */ 20 21 /** Define ABSPATH as this file's directory */ 22 define( 'ABSPATH', dirname(__FILE__) . '/' ); 23 24 25 error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); 26 27 if ( file_exists( ABSPATH . 'wp-config.php') ) { 28 29 /** The config file resides in ABSPATH */ 30 require_once( ABSPATH . 'wp-config.php' ); 31 32 } elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) { 33 34 /** The config file resides one level above ABSPATH but is not part of another install */ 35 //如果wp-config.php存在于绝对路径的上一级,而且不是另一个wordpress的一部分 36 require_once( dirname(ABSPATH) . '/wp-config.php' ); 37 38 } else { 39 40 // A config file doesn't exist 41 42 // Set a path for the link to the installer 43 if ( strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false ) 44 $path = 'setup-config.php'; 45 else 46 $path = 'wp-admin/setup-config.php'; 47 48 define( 'WPINC', 'wp-includes' ); 49 define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); 50 require_once( ABSPATH . WPINC . '/load.php' ); 51 require_once( ABSPATH . WPINC . '/version.php' ); 52 53 wp_check_php_mysql_versions(); 54 wp_load_translations_early(); 55 56 require_once( ABSPATH . WPINC . '/functions.php' ); 57 //2013/10/17 by:richardxu 注意这里的__函数 58 // Die with an error message 59 $die = __( "There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started." ) . '</p>'; 60 $die .= '<p>' . __( "Need more help? <a href='http://codex.wordpress.org/Editing_wp-config.php'>We got it</a>." ) . '</p>'; 61 $die .= '<p>' . __( "You can create a <code>wp-config.php</code> file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ) . '</p>'; 62 $die .= '<p><a href="' . $path . '" class="button button-large">' . __( "Create a Configuration File" ) . '</a>'; 63 64 wp_die( $die, __( 'WordPress › Error' ) ); 65 }
wp-config.php
这个是wp的配置文件
<?php /** * WordPress基础配置文件。 * * 本文件包含以下配置选项:MySQL设置、数据库表名前缀、密钥、 * WordPress语言设定以及ABSPATH。如需更多信息,请访问 * {@link http://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php * 编辑wp-config.php}Codex页面。MySQL设置具体信息请咨询您的空间提供商。 * * 这个文件被安装程序用于自动生成wp-config.php配置文件, * 您可以手动复制这个文件,并重命名为“wp-config.php”,然后填入相关信息。 * * @package WordPress */ // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** // /** WordPress数据库的名称 */ define('DB_NAME', 'wordpress'); /** MySQL数据库用户名 */ define('DB_USER', 'root'); /** MySQL数据库密码 */ define('DB_PASSWORD', 'root'); /** MySQL主机 */ define('DB_HOST', 'localhost'); /** 创建数据表时默认的文字编码 */ define('DB_CHARSET', 'utf8'); /** 数据库整理类型。如不确定请勿更改 */ define('DB_COLLATE', ''); /**#@+ * 身份认证密钥与盐。 * * 修改为任意独一无二的字串! * 或者直接访问{@link https://api.wordpress.org/secret-key/1.1/salt/ * WordPress.org密钥生成服务} * 任何修改都会导致所有cookies失效,所有用户将必须重新登录。 * * @since 2.6.0 */ define('AUTH_KEY', '[,u,aXAJ^X^$Ab;|{B>CH7.3hz5f]dZR{<Sz_i1QSya)pGiI8.D{)Q*M=ZDybK`E'); define('SECURE_AUTH_KEY', 'kTOj;}3*pd)GK9~$?a!wXUM!kGGuSpirkVO0hhw3M3uYfVfo TWW4A!Ot7Y=t@IM'); define('LOGGED_IN_KEY', '(`/fid%U%k;0yw|SCV3e1]Y*#4v>A|+Q4#7VJDxsDr9TxH)~sa{L!63)BQ]wPC/F'); define('NONCE_KEY', 'r07u#Pm6=yJ+8e_q5pO6,z-/OiI/wXVV@]5I.]3Jke.!W56[EeufD3p0!zuYipD}'); define('AUTH_SALT', ' jXvDFsjwmUhk&?OkVqaJ;>}f*/P{RreQkZC3mvnq%KM`DL=p_H~c=mkLso=&SMb'); define('SECURE_AUTH_SALT', '~4L#z$0}zg@#K e~neH5Z`UeGqI|0H2>@uq8lg2G[I7g}h!ii8YQCmvw[`x)D[_c'); define('LOGGED_IN_SALT', '[f#FWrv;BjfZy1!vS[>wd1@}Z-t35{/mbv>sdRIv14&w7i=|!):}X+MoNC6-87np'); define('NONCE_SALT', 'OXLMjbQ=/%qz.tz&7_q{0*^1.,AhOob9j7C%39n`nz`#g+-_cK~P@0lU/?q,Z4M6'); /**#@-*/ /** * WordPress数据表前缀。 * * 如果您有在同一数据库内安装多个WordPress的需求,请为每个WordPress设置 * 不同的数据表前缀。前缀名只能为数字、字母加下划线。 */ $table_prefix = 'wp_'; /** * WordPress语言设置,中文版本默认为中文。 * * 本项设定能够让WordPress显示您需要的语言。 * wp-content/languages内应放置同名的.mo语言文件。 * 例如,要使用WordPress简体中文界面,请在wp-content/languages * 放入zh_CN.mo,并将WPLANG设为'zh_CN'。 */ define('WPLANG', 'zh_CN'); /** * 开发者专用:WordPress调试模式。 * * 将这个值改为true,WordPress将显示所有用于开发的提示。 * 强烈建议插件开发者在开发环境中启用WP_DEBUG。 */ //2013/10/17 by:richardxu 开启 //define('WP_DEBUG', false); define('WP_DEBUG', true); /* 好了!请不要再继续编辑。请保存本文件。使用愉快! */ /** WordPress目录的绝对路径。 */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** 设置WordPress变量和包含文件。 */ require_once(ABSPATH . 'wp-settings.php');
OK,接下来是
wp-settings.php
这部分放到第二弹中说明,lol~
参考: