WordPress是一个单入口的文件,所有的前端处理都必须经过index.php,这是通过修改web服务器的rewrite规则来实现的。这种做法的好处是显而易见的,这样URL更好看,不必为每一个url新建一个文件。

我们看看wp大致的文件调用是什么样子的。

wordpress可以分为3个阶段,一是初始化阶段,即初始化常量、环境、加载核心文件等等;二是内容处理阶段,即根据用户的请求调用相关函数获取和处理数据,为前端展示准备数据;三是主题应用阶段,在这个阶段,需要展示的数据已经准备完毕,需要根据用户的请求加载相应的主题模板,即对主题进行路由。经过这三各阶段,用户请求的页面就可以完全的展现出来了。从上图可以看到wp的初始化阶段相当的繁琐。

index.php文件

WordPress初始化的过程:当你输入你的网址对wordpress进行初始化时,wordpress默认会找

根目录下的index.php页面,看一下index.php页面。

//该常量定义为false时,不使用主题,站点会显示为空白,为true时,则正常显示。

define('WP_USE_THEMES', true);

//加载wp-blog-header.php

require('./wp-blog-header.php');

wp-blog-header.php文件

你会发现,它会去调用根目录下的wp-blog-header.php,我们继续看wp-blog-header.php

//wp_did_header变量,相当于一个flag,确保每次刷新时,wp-blog-header.php文件只执行一次。

if ( !isset($wp_did_header) ) {

$wp_did_header = true;//设置为true,确保只执行一次。

//初始化阶段。加载wp-load.php,

require_once( dirname(__FILE__) . '/wp-load.php' );

//内容处理阶段 wp()位于functon.php中,创建WordPress查询

wp();

//主题应用阶段。ABSPATH wordpress目录的绝对路径

require_once( ABSPATH . WPINC . '/template-loader.php' );

}

wp-load.php 文件

接下来会调用wp-load.php 文件,wp-load.php 主要用来判断WordPress 程序根目录中是否包含 wp-config.php 文件。如果有则加载;

如果没有则检查是否用户将该文件移到其他文件夹下,并且如果在其他文件夹下发现 WordPress 配置文件后还有检查该文件夹下是否有 wp-settings.php 文件以避免同一个服务器安装多个网站时调用的是其他 WordPress 程序的配置文件;

最后如果还是找不到 wp-config.php 文件,那么程序会运行 wp-admin 文件夹下的 setup-config.php文件以及 wp-includes 文件夹下的 load.php 、 functions.php 、 version.php 这几个文件引导用户重新生成一个 wp-config.php 文件,一般说来就像我们重新安装 WordPress 弹出的界面一样。该文件下代码比较多就不复制了,大家可自行看下。

通过wp-load.php,wordpress先后把wp-config.php, wp-setting.php,classes.php,fucntions.php,

query.php等文件加载进来,并建立了三个全局变量,$wp_the_query,$wp_rewrite和$wp ,分别为WP_Query,

WP_Rewrite和WP类的实例。然后,wp-blog-header执行wp()函数,并通过其调用$wp所属WP类的main方法,

这个方法又调用一系列方法,但最重要的是parse_request方法, WP从这里开始解析URL并建立主循环。

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(

array(

'db_host' => SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,

'db_user'=> SAE_MYSQL_USER,

'db_password'=> SAE_MYSQL_PASS,

'db_name'=> SAE_MYSQL_DB,

'db_charset'=> 'utf8'

)

),

'read'=> array(

array(

'db_host' => SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,

'db_user'=> SAE_MYSQL_USER,

'db_password'=> SAE_MYSQL_PASS,

'db_name'=> SAE_MYSQL_DB,

'db_charset'=> 'utf8'

)

),

);

$global_db_list = $db_list['write'];

/**#@+

* 身份密匙设定。

*

* 您可以随意写一些字符

* 或者直接访问 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私钥生成服务},

* 任何修改都会导致 cookie 失效,所有用户必须重新登录。

*

* @since 2.6.0

*/

define('AUTH_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_KEY', SAE_SECRETKEY ));

define('SECURE_AUTH_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_KEY', SAE_SECRETKEY ));

define('LOGGED_IN_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_KEY', SAE_SECRETKEY ));

define('NONCE_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_KEY', SAE_SECRETKEY ));

define('AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_SALT', SAE_SECRETKEY ));

define('SECURE_AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_SALT', SAE_SECRETKEY ));

define('LOGGED_IN_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_SALT', SAE_SECRETKEY ));

define('NONCE_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_SALT', SAE_SECRETKEY ));

/**#@-*/

/**

* WordPress 数据表前缀。

*

* 如果您有在同一数据库内安装多个 WordPress 的需求,请为每个 WordPress 设置不同的数据表前缀。

* 前缀名只能为数字、字母加下划线。

*/

$table_prefix = 'wp_';

/**

* WordPress 语言设置,默认为英语。

*

* 本项设定能够让 WordPress 显示您需要的语言。

* wp-content/languages 内应放置同名的 .mo 语言文件。

* 要使用 WordPress 简体中文界面,只需填入 zh_CN。

*/

define ('WPLANG', 'zh_CN');

/**

* 开发者专用:WordPress 调试模式。

*

* 将这个值改为“true”,WordPress 将显示所有开发过程中的提示。

* 强烈建议插件开发者在开发环境中启用本功能。

*/

define('WP_DEBUG', false);

/* 好了!请不要再继续编辑。请保存该文件。 */

/** WordPress 目录的绝对路径。 */

if ( !defined('ABSPATH') )

define('ABSPATH', dirname(__FILE__) . '/');

/** 设置 WordPress 变量和包含文件。 这个文件内容很多啊,分析较困难*/

require_once(ABSPATH . 'wp-settings.php');

wp-config.php 主要用来连接网站数据库并将数据库中的一些必要信息返回,具体关于该文件的介绍大家可参考这篇文章>>> WordPress基础配置文件wp-config.php详解 。同时该文件还会调用 wp-settings.php 文件以读取用户对文件的设置并加载相关内容。

wp-setting.php

前面那些文件没有什么问题的话,WordPress 会自动加载该文件。该文件主要是一些 require 的语句,用来加载一些类库文件及函数文件等,为 WordPress 的运行做准备,这些文件一般都在 wp-include 文件夹下,大家可以简单浏览下该文件夹下的文件结构理解 WordPress 的运行原理。

template-loader.php

当运行到第二步 wp-blog-header.php 时,程序除了加载wp-load.php 文件还会加载 wp-include 文件夹下的 template-loader.php 文件,该文件主要用于根据用户URL返回加载相应模板,包括页面模板、文章模板、分类模板、首页模板等。另外该文件还会根据是否启用 trackback 来确定是否加载 wp-trackback.php 文件。

wp trackback.php,WordPress工作原理相关推荐

  1. WordPress工作原理之程序文件执行顺序

    在了解WordPress挂载机制时,一直有一个疑惑,到底是WordPress的内核源文件先执行还是主题文件里functions.php文件先执行.为了解决这个问题,想了解WordPress的工作原理, ...

  2. 浅析数字签名的工作原理 【小白级别的原创文章 仅供扫盲】

    浅析数字签名的工作原理[小白级别的原创文章仅供扫盲] 最近发现个问题,很多摆弄电脑多年的朋友对"数字签名.数字证书"的概念一知半解,也搞不清它们的区别,对其重要性更是不得而知.看了 ...

  3. @http工作原理及使用

    文章目录 Http协议介绍 Http工作原理 访问网站分析 Http请求方法 Http响应方法 http相关术语 Http协议介绍  `HTTP` 全称:`Hyper Text Transfer P ...

  4. 理解 HTTPS 的工作原理

    转自 https://linux.cn/article-6804-1.html 目标读者:理解HTTP协议,对称和非对称加密,想要了解HTTPS协议的工作原理. 读完本文,你能明白 什么是HTTPS, ...

  5. 红外传输单道心电遥测系统设计及工作原理

    红外传输单道心电遥测系统设计及工作原理 心电图是诊断心脏病的重要手段,但是,由于种种原因,用普通心电图仪很难捕捉到异常心电图.无线电心电监护仪或者24小时动态心电监护仪虽然能有效地解决这一问题,但是造 ...

  6. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  7. 深入理解Nginx工作原理

    1 反向代理 1.1 概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给intern ...

  8. 高频开关电源原理_程控开关电源的工作原理

    本文介绍了开关电源的工作原理以及它的特点. 程控开关电源要要比线性电源复杂得多. 下图是典型的开关电源工作原理图. 首先对 220 V/50Hz 的 AC 输入,通过桥式整流器进行整流 储能电容对整流 ...

  9. Servlet生命周期与工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

最新文章

  1. js实现webSocket客户端
  2. 用C++调用tensorflow在python下训练好的模型(centos7)
  3. 不扯概念,用例子演示什么是脏读,不可重复读,幻读?
  4. Python风格总结:十进制转二进制、八进制、十六进制
  5. vue项目微信分享之后路由链接被破坏怎么办
  6. 整数反转Java_详解 LeetCode_007_整数反转(Java 实现)
  7. flex制作一个用户登录框(含验证码)
  8. ElasticSearch - 学习
  9. 安装php项目后图片路径不对,解决织梦CMS栏目绑定二级域名后图片不显示,路径错误办法...
  10. About Face 3:交互设计精髓pdf
  11. 微信外卖点餐系统开发教程
  12. firefox无法显示flash问题解决
  13. 华为电脑怎么不上鸿蒙,我找不到不喜欢华为鸿蒙操作系统的理由
  14. 《Think Python》练习 4-1:本章示例代码栈图、停止点偏离思考
  15. 中新峰会 | MOV:DeFi的下一个可能
  16. Matlab实现绘制圆柱体
  17. 计算机一级ms office应用题,计算机一级MSOffice考试练习题及答案
  18. 【Python CUDA版】河北工业大学计算机图像处理实验五:图像分割
  19. 【福利分享】阿里面试官叫我手写HashMap,我两分钟就给他整出来了!!!
  20. Opencv图像处理 图像噪点与降噪 形体学变换

热门文章

  1. 让iis7.5显示php错误的详细信息~
  2. springcloud(三):服务提供与调用
  3. 管好统计信息,开启SQL优化之门
  4. Foursquare开源Rogue和Full-Loaded两款开发工具
  5. IMAP 称作交互邮件访问协议
  6. 基于SSM实现新闻推荐系统
  7. 基于Python的信用评分卡模型分析
  8. 洛谷P1832 A+B Problem(再升级)
  9. 解压Ubuntu的initrd.img的方法
  10. Vue 系列之 组件