WORDPRESS第七课WORDPRESS源代码研究-前台运行流程

2024-02-28 23:32

本文主要是介绍WORDPRESS第七课WORDPRESS源代码研究-前台运行流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

wordpress源代码研究-前台运行流程

WP是一个单入口的东西,也就是说他的所有前端处理都是在一个index.php里的。但是为什么我们经常看到的不是index.php?XXXX。。而是像现在你看到这篇文章的URL一样,他不是index.php啊,嗯,确实不是,这个真不是!

其 实这是一个rewrite的小把戏,你看到我的URL是这样的,其实我的目录里根本就没这个文件,当没有这个文件的时候,我的.htaccess 文件(相当于apache对这个目录的配置)就将这个请求导向index.php。然后index.php分析一下我的URL,就知道我实际要做的是什么 了,他会像你请求index.php?p=num一样处理这个请求。所以就变成了看到是一个样,做的又是另一个样了。

最原始的WP根目录下是没有.htaccess文件的,你把固定链接改一下,改成其它的模式,就会生成这个.htaccess 了,不信可以试一下,我可不是70km的,我经得起考验。

为什么要费这么多事呢?这样因为这样的话URL看起来更好看,对搜索引擎也更友好。

(PS:当然,有一些静态化的插件,他们可能又有不同的原理。我还没有研究过,以后再说。)

我们知道我们最伟大的就是这个index.php了,那看看他有什么呢?它其实非常简单,基本上就一行,就是包含wp-blog-header.php

 

wp-blog-header.php完成两个动作,一个初始环境相关的一些数据,一个调用主题包模板进行显示。也就是一个是把数据准备好,一个是把这些数据显示出来。

初始环境,调用了:wp-load.php

wp-load.php主要就是包含了wp-config.php,其实就是定义了一些宏变量(DB设置,密钥,路径,语言)然后wp-config.php在最后调用wp-settings.php

这个wp-settings.php得重点说一下,他真的比较强大了,主要的工作都是这丫干的。他先是做了很多细节上的东西,比如关闭register-globales,运行时间计算等。。。基本你看一下也就差不多。

最重要的是他在运行过程中调用了很多的action和filter.

什么是action和filter呢,这是WP的插件机制的核心实现,说白了就是一些hook在一定位置上的函数,程序运行到那里就会执行。这个过程我以后会独立出来写。

反正就是把好多变量都取到了,比如哪些变量呢?比如有哪些插件,插件的信息,比如用户相关的信息。。反正是很多,就是在这个页面可能会用到的都取了,只是不会SB到去取所有文章这种东西。

这 些数据现在是以PHP的数据类型存在于内存中的,后面一步就是调用模板了,其实调用很简单,就是包含。为什 么一包含他就可以显示那么多数据呢??我们都用过Smarty。那Smarty在用之前还要把要用的参数assign..然后再用display调用模板 呢。为什么这个这么简单呢,说实话,因为Smarty在这方面更强大。

我们这个就是个动态的东西,比如你现在看到这个页面,他要显示文 章标题,文章内容,文章标签,还有一些其它的 公共的东西,有的数据已经在前面取到内存中了,我们只要调用约定好的方法就可以取到了,但有的数据(比如文章标题,内容)他们还在数据库里,我们不能直接 用,其实这时候也有通用的接口,你只要调用一个函数,就有程序乖乖地去给你从数据库里取东西了。这都是早就封闭好了的。方便吧。

然后 呢,你看到这个页面,他是一个模板,他又不是一个模板,是这样的:他本是一个单独的模板,但是这个模板里 面又调用了其它的模板。比如这个header.每个页面都一样,footer也是,右边基本上也是,每个页都一样。所以他们在模板里是单独的PHP文件 (header.php,footer.php),完整的页面的模板只是实现了中间这一部分,上和下都是通过包含这些一小块一小块的模板来呈现的。

大 概就是这样吧。其实真TM是挺简单的,下一篇再讲插件机制,其实也不难,我发现WP看起来最困难的就是他对 每个细节的处理都那么精准。好多问题要是我写肯定写不到那么完美。比如你可以看一下wp-settings.php里面那些包含的文件,他们各司其职,每 一个文件都那么完美!!

.entry-content

这篇关于WORDPRESS第七课WORDPRESS源代码研究-前台运行流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/756959

相关文章

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://