1.WordPress源码

2小时前背景作为一个优秀的开源项目,wordpress在全球有着极其广泛的应用但是由于wordpress框架中,经常使用global进行赋值,导致初次使用它的程序员不能很快对它的整体架构有一个直观的认识。

2.深入解析WordPress

在一位特殊朋友进入一家使用wordpress的公司后,熟悉wordpress比较慢,帮忙做了一次整理;在此,我将整理的过程记录下来三个阶段首先,我们先整体了解下wordpress的三个主要流程:初始化(资源加载)、准备数据和渲染。

3.wordpress架构解读

我们都知道,wordpress的主入口文件是index.php在 index.php 中 引入了文件 wp-blog-header.php // wp-blog-header.php if ( ! isset( $wp_did_header ) ) { $wp_did_header = true; // 。

4.WordPress代码库 – 专注WordPress的实用资源

Load the WordPress library. require_once __DIR__ . /wp-load.php; // Set up the Word此文件中,即包含了wordpress加载的三个阶段:

5.wordpress开源

资源加载阶段:require_once __DIR__ . /wp-load.php;数据准备阶段:// Set up the WordPress query. wp();渲染阶段:接下来,我们看看每个阶段所做的事情。

6.wordpress整站源码

资源加载阶段wp-load.php 引入wp-config.php, wp-config.php 引入 wp-settings.php,核心的加载逻辑在 wp-settings.php中资源加载阶段,主要是加载所有依赖的PHP库和文件,包括各种核心类,functio。

7.wordpress案例

ns,插件 等等需要注意的一点是,在wordpress 未安装成功时,是没有wp-config.php这个文件的数据准备阶段数据准备阶段的入口是 wp-blog-header.php 中的 wp() 函数;wp函数的定义是在functions.php中;最终会调用到 class-wp.php 中的 main() 方法。

8.wordpress开发者文档

main() 方法主要做三件事情:parse_request(): 解析请求的参数query_posts(): 通过请求的参数查询文章register_globals(): 注册全局数据,以便渲染阶段可以获取数据

9.wordpress开发

我们重点关注第2和第3这两个事情查询文章query_posts() 会调用 class-wp-query.php 中的 query() 方法,query() 方法做两件事情:init(): 重置所有数据get_posts(): 查询文章。

10.wordpress论坛源码

get_posts() 方法会调用当前类的 parse_query() 方法,此方法接近1000行,是整个wordpress中最核心的逻辑parse_query() 逻辑复杂,我们只关注两件事情:解析请求的数据(get/po。

st),构造读取/写入的数据和条件,包括日期数据文章标题附件其他条件根据url请求参数判断当前请求是哪个页面,例如设置is_home = true,就表示为首页,is_page = true 表示是文章页面;设置当前页面,在数据渲染阶段会用到。

sqlget_posts()执行完毕后,我们也就获取到了想要的文章(根据url参数查询出来的),然后进入注册全局数据阶段,即 register_globals();register_globals() 方法的代码相对简单,如下:

public function register_globals() { global $wp_query; // Extract updated query vars back into global namespace.

foreach ( (array) $wp_query->query_vars as $key => $value ) { $GLOBALS[ $key ] = $value; } $GLOBALS[query_string] = $this->query_string; $GLOBALS[posts] = & $

wp_query->posts; $GLOBALS[post] = isset( $wp_query->post ) ? $wp_query->post : null; $GLOBALS[request] = $wp_query->request; if ( $wp_query->is_single() || $wp_query->is_page(

) ) { $GLOBALS[more] = 1; $GLOBALS[single] = 1; } if ( $wp_query->is_author() && isset( $wp_query->post ) ) { $GLOBALS[authordata] = get_userdata( $wp_query->p

ost->post_author ); } }其中主要的为:$GLOBALS[posts] = & $wp_query->posts; $GLOBALS[post] = isset( $wp_query->post ) ? $wp_query->post : null;

这两行代码将上一步查询到的文章和文章的列表,放入了$GLOBALS中,在渲染阶段,会从 $GLOBALS 读取文章内容渲染阶段码如下:php中,实际调用的方法是 class-wp-query.php 中对应的方法名。

在计算出当前页面后,就根据当前配置的主题,去加载主题下的模板文件在模板文件中,我们就可以获取到之前准备好的数据($GLOBALS中的数据)以文章内容为例,t_the_content(), get_the_content() 调用 post.php 中的 get_post(), get_post()定义如下:。

function get_post( $pos ) { $post = $GLOBALS[post]; } if ( $post instanceof WP_Post ) { $_

post = $post; } // 其他代码 ..... return $_post; }方法的第一行就用 $GLOBALS 中取到了之前准备好的文章数据。

拿到文章数据后,get_the_content() 方法会对文章数据进行组装,返回给 the_content() , 由the_content() 方法进行输出总结到此,我们将这个wordpress的加载流程梳理一下,希望对大家在看源码时有所帮助。

源码中还有很多细节需要自行梳理,在梳理时,需要注意的就是global的使用