WordPress⽂件⽬录结构详解
学习开源代码,是⼀种很快的提升⾃⼰的学习⽅法。Wordpress作为⼀个开源的博客系统,⾮常优秀,应⽤⼴泛,使⽤起来简单⽅便,具有丰富的主题和插件,可以按照⾃⼰的需求来任意的进⾏修改。
本⽂我们分析⼀下WordPress的源码⽬录结构。
WordPress是⼀个单⼊⼝的⽂件,所有的前端处理都必须经过index.php,这是通过修改web服务器的rewrite规则来实现的。这种做法的好处是显⽽易见的,这样URL更好看,不必为每⼀个url新建⼀个⽂件。
我们看看wp⼤致的⽂件调⽤是什么样⼦的。
wordpress可以分为3个阶段:
⼀是初始化阶段,即初始化常量、环境、加载核⼼⽂件等等;
⼆是内容处理阶段,即根据⽤户的请求调⽤相关函数获取和处理数据,为前端展⽰准备数据;
三是主题应⽤阶段,在这个阶段,需要展⽰的数据已经准备完毕,需要根据⽤户的请求加载相应的主题
模板,即对主题进⾏路由。经过这三各阶段,⽤户请求的页⾯就可以完全的展现出来了。从上图可以看到wp的初始化阶段相当的繁琐。
wordpress安装目录Index.php⽂件实际上没啥内容. 定义了常量WP_USE_THEMES和加载了⽂件wp-blog-header.php
1. <?php
2. /*index.php*/
3. //该常量定义为false时,不使⽤主题,站点会显⽰为空⽩,为true时,则正常显⽰。
4. define('WP_USE_THEMES',true);
5. //加载wp-blog-header.php
6. require('./wp-blog-header.php');
7. ?>
wp–blog-header⾥⾯是什么样⼦呢?
1. <?php
2. /*wp-blog-header.php */
3. //wp_did_header变量,相当于⼀个flag,确保每次刷新时,wp-blog-header.php⽂件只执⾏⼀次。
4. if(!isset($wp_did_header)){
5.
6. $wp_did_header =true;//置为true,确保只执⾏⼀次。
7. //初始化阶段。加载wp-load.php,
8. require_once( dirname(__FILE__).'/wp-load.php');
9. //内容处理阶段 wp()位于functon.php中
10. wp();
11. //主题应⽤阶段。ABSPATH wordpress⽬录的绝对路径
12. require_once( ABSPATH . WPINC .'/template-loader.php');
13.
14. }
15. ?>
wp-blog-header任然很简单,但是可以看到wp的三个明显的阶段,初始化阶段、内容处理阶段、主题应⽤阶段。
wp-load.php的功能很简单,就是加载wp-config.php. wp-config.php是需要⽤户⾃⼰进⾏设置的。设置DB设置,密钥,路径,语⾔等
1. <?php
2. /*wp-load.php
3. */
4.
5. // 定义常量 wordpress根⽬录的绝对路径
6. define('ABSPATH', dirname(__FILE__).'/');
7. //设置错误报告模式这个if的分⽀差别在E_RECOVERABLE_ERROR ?
8. if(defined('E_RECOVERABLE_ERROR'))
9. 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);
10. else
11. error_reporting(E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING |
E_PARSE | E_USER_ERROR | E_USER_WARNING);
12. //加载wp-config.php
13. if( file_exists( ABSPATH .'wp-config.php')){
14.
15. /** The config file resides in ABSPATH */
16. require_once( ABSPATH .'wp-config.php');
17.
18. } elseif ( file_exists( dirname(ABSPATH).'/wp-config.php')&&! file_exists( dirname(ABSPATH).'/wp-settings.php')){
19.
20. /** The config file resides one level above ABSPATH but is not part of another install*/
21. //如果wp-config.php存在于绝对路径的上⼀级,⽽且不是另⼀个wordpress的⼀部分
22. require_once( dirname(ABSPATH).'/wp-config.php');
23.
24. }else{
25.
26. // wp-config.php 不存在时,
27.
28. // Set a path for the link to the installer
29. if( strpos($_SERVER['PHP_SELF'],'wp-admin')!==false)
30. $path ='';
31. else
32. $path ='wp-admin/';
33.
34. // Die with an error message
35. require_once( ABSPATH .'/wp-includes/class-wp-error.php');
36. require_once( ABSPATH .'/wp-includes/functions.php');
37. require_once( ABSPATH .'/wp-includes/plugin.php');
38. $text_direction =/*WP_I18N_TEXT_DIRECTION*/'从左到右'/*/WP_I18N_TEXT_DIRECTION*/;
39. wp_die(sprintf(/*WP_I18N_NO_CONFIG*/'看起来似乎没有 <code>wp-config.php</code> ⽂件。我们需要这个⽂件来让⼀
切开始,可以查看<a href=\'/Editing_wp-config.php\'>更多帮助</a>。那么现在您可以通过这个Web 界⾯创建⼀个 <code>wp-config.php</code> ⽂件,但并⾮所有主机都⽀持,安全的做法是⼿动创建。</p><p><a href=\'%ssetup-config.php\' class=\'button\'>试试创建⼀个配置⽂件</a>'/*/WP_I18N_NO_CONFIG*/, $path),
/*WP_I18N_ERROR_TITLE*/'WordPress › 错误'/*/WP_I18N_ERROR_TITLE*/, array('text_direction'=> $text_direction));
40. }
41. ?>
来看看wp-config.php:
1. <?php
2. /*wp-config.php */// ** MySQL 设置 - 具体信息来⾃您正在使⽤的主机 ** // /** WordPress 数据库的名称 */
define('DB_NAME', SAE_MYSQL_DB); /** MySQL 数据库⽤户名 */ define('DB_USER', SAE_MYSQL_USER); /** MySQL 数据库密码 */ define('DB_PASSWORD', SAE_MYSQL_PASS); /** MySQL 主机 */ define('DB_HOST',
SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT); /** 创建数据表时默认的⽂字编码 */ define('DB_CHARSET', 'utf8'); /** 数据库整理类型。如不确定请勿更改 */ define('DB_COLLATE', ''); define('WP_USE_MULTIPLE_DB', true); $db_list = array( 'write'=> array(
3. array(
4. 'db_host'=> SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,
5. 'db_user'=> SAE_MYSQL_USER,
6. 'db_password'=> SAE_MYSQL_PASS,
7. 'db_name'=> SAE_MYSQL_DB,
8. 'db_charset'=>'utf8'
9. )
10. ),
11. 'read'=> array(
12. array(
13. 'db_host'=> SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,
14. 'db_user'=> SAE_MYSQL_USER,
15. 'db_password'=> SAE_MYSQL_PASS,
16. 'db_name'=> SAE_MYSQL_DB,
17. 'db_charset'=>'utf8'
18. )
19. ),
20. );
21. $global_db_list = $db_list['write'];
22.
23. /**#@+
24. * ⾝份密匙设定。
25. *
26. * 您可以随意写⼀些字符
27. * 或者直接访问 {@link /secret-key/1.1/salt/ 私钥⽣成服务},
28. * 任何修改都会导致 cookie 失效,所有⽤户必须重新登录。
29. *
30. * @since 2.6.0
31. */
32. define('AUTH_KEY', hash_hmac('sha1', SAE_ACCESSKEY .'AUTH_KEY', SAE_SECRETKEY ));
33. define('SECURE_AUTH_KEY', hash_hmac('sha1', SAE_ACCESSKEY .'SECURE_AUTH_KEY', SAE_SECRETKEY
));
34. define('LOGGED_IN_KEY', hash_hmac('sha1', SAE_ACCESSKEY .'LOGGED_IN_KEY', SAE_SECRETKEY ));
35. define('NONCE_KEY', hash_hmac('sha1', SAE_ACCESSKEY .'NONCE_KEY', SAE_SECRETKEY ));
36. define('AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY .'AUTH_SALT', SAE_SECRETKEY ));
37. define('SECURE_AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY .'SECURE_AUTH_SALT', SAE_SECRETKEY
));
38. define('LOGGED_IN_SALT', hash_hmac('sha1', SAE_ACCESSKEY .'LOGGED_IN_SALT', SAE_SECRETKEY ));
39. define('NONCE_SALT', hash_hmac('sha1', SAE_ACCESSKEY .'NONCE_SALT', SAE_SECRETKEY ));
39. define('NONCE_SALT', hash_hmac('sha1', SAE_ACCESSKEY .'NONCE_SALT', SAE_SECRETKEY ));
40.
41. /**#@-*/
42.
43. /**
44. * WordPress 数据表前缀。
45. *
46. * 如果您有在同⼀数据库内安装多个 WordPress 的需求,请为每个 WordPress 设置不同的数据表前缀。
47. * 前缀名只能为数字、字母加下划线。
48. */
49. $table_prefix ='wp_';
50.
51. /**
52. * WordPress 语⾔设置,默认为英语。
53. *
54. * 本项设定能够让 WordPress 显⽰您需要的语⾔。
55. * wp-content/languages 内应放置同名的 .mo 语⾔⽂件。
56. * 要使⽤ WordPress 简体中⽂界⾯,只需填⼊ zh_CN。
57. */
58. define ('WPLANG','zh_CN');
59.
60. /**
61. * 开发者专⽤:WordPress 调试模式。
62. *
63. * 将这个值改为“true”,WordPress 将显⽰所有开发过程中的提⽰。
64. * 强烈建议插件开发者在开发环境中启⽤本功能。
65. */
66. define('WP_DEBUG',false);
67.
68. /* 好了!请不要再继续编辑。请保存该⽂件。 */
69.
70. /** WordPress ⽬录的绝对路径。 */
71. if(!defined('ABSPATH'))
72. define('ABSPATH', dirname(__FILE__).'/');
73.
74. /** 设置 WordPress 变量和包含⽂件。这个⽂件内容很多啊,分析较困难*/
75. require_once(ABSPATH .'wp-settings.php');
76. ?>
好了,就先写这么多吧,WordPress很复杂,这仅是个⽪⽑⽽已,在此向开发WordPress的⼤⽜们致敬!
也欢迎⼤家光临我的⽹站:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论