zoukankan      html  css  js  c++  java
  • WordPress 庖丁解牛 第一弹

      

      近突然想研究下传说中的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调用关系如下图:

    WordPress 入口说明


    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

    描述:启动引导(Bootstrap)文件,用于设置ABSPATH常量和加载wp-config.php文件。wp-config.php将会加载wp-settings.php文件,它将用于建立WP的环境。

    如果找不到wp-config.php文件,则会提示错误信息,要求用户设置wp-config.php文件。

    wp-load.php还会自动搜索WP的上级文件夹寻找wp-config.php文件,因此可以保护WP文件夹不被暴露。
    1)设置ABSPATH常量为到WP文件夹的路径。
    2)设置错误报告模式。
    3)加载wp-config.php文件(a.直接加载、b.从上级文件夹加载、c.找不到则报错,使用wp_die()函数)。
     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 &rsaquo; Error' ) );
    65 }

    wp-config.php

     这个是wp的配置文件

    描述:WordPress基础配置文件。
    本文件包含以下配置选项: MySQL设置, 数据库表名前缀,密匙, WordPress语言设定以及ABSPATH. 如需更多信息,请访问http://codex.wordpress.org/Editing_wp-config.php. MySQL设置具体信息请咨询您的空间提供商。这个文件用在于安装程序自动生成 wp-config.php 配置文件,你可以手动复制这个文件,并重命名为 wp-config.php,然后输入相关信息。
     
    1)设置数据库名、用户名、密码、数据库主机、数据库编码、数据库整理类型、数据库表前缀。
    2)设置身份密匙,用于进行cookie加密。
    3)设置WP语言。
    4)设置WordPress目录的绝对路径ABSPATH。
    5)加载wp-settings.php文件。
    <?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~

     参考:

    http://blog.csdn.net/liujiyong7/article/details/8037843

    http://www.cnblogs.com/vicenteforever/articles/1866155.html

  • 相关阅读:
    控制语句
    (小程序)接收用户键盘输入
    运算符
    java doc形成注释文档
    linux中rz、sz命令,zip、unzip命令,sqlite3基本操作
    hash应用-加随机盐保存密码
    非对称/对称加密算法,hash算法
    自签名的应用--数字货币
    HTTPS原理
    Django中app的model相互引用问题
  • 原文地址:https://www.cnblogs.com/RichardXu/p/3376260.html
Copyright © 2011-2022 走看看