WordPress主题机制的运行原理

2017-10-30 10:25:37来源:oschina作者:FeanLau人点击

分享

基本思想


PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。


PHP代码的可以完成功能:显示出html的字符串标签的代码。WordPress的首页index.php的get_header()、get_sidebar()、get_footer()等函数返回的结果用echo输出是带有html标签的代码段。


主题包各文件说明header.php:这个文件中包含博客的标题(title),描述(description),tag,以及css等信息。
sidebar.php:这个文件控制你侧边栏中的显示方式。
footer.php:控制页面底部的显示,包括ICP,版权声明等信息。
archive.php:被系统调用用于显示用户提交分类,按日期归档,tag等查询后显示的页面。下面代码显示了archive.php内部是如何辨别不同的查询请求的:
<?php if (is_category()) { ?>
‘<?php single_cat_title(); ?>’ 分类下的文章


<?php }
else if( is_tag() )
{ ?>
‘<?php single_tag_title(); ?>’ 标签下的文章

…………
<?php } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
日志归档

<?php } ?>search.php:用于显示用户提交搜索后显示的页面。
searchform.php:搜索栏表单,被header.php调用。
single.php:用于全文显示post页面。
page.php:用于全文显示page页面。
function.php:存放自定义的函数,被其他文件包含和调用。
comments.php:留意评论模板,被single.php,page.php等需要评论功能的网页调用。
style.css:整个网站布局和显示模式。
screenshot.jpg:用于在后台选择主题页面里显示这个主题的截图,wordpress会自动在主题目录下寻找screenshot.*文件。 从源码看主题的调用过程

当浏览器向apache发送请求要得到博客主页的HTML代码时,./index.php被调用。./index.php中的require(‘./wp-blog-header.php’);调用./wp-blog-header.php。 而./wp-blog-header.php做了一些链接数据库包含头文件等处理,其中有两件事情与主题调用有关: 1、有require_once( dirname(__FILE__) ./wp-includes/functions.php’); 而./wp-includes/functions.php中包含进了./wp-includes/theme.php,这里定义了get_home_template()。


function get_home_template() {//返回所要加载的主题
$template = ”;
if ( file_exists(TEMPLATEPATH . “/home.php”) )
$template = TEMPLATEPATH . “/home.php”;
elseif ( file_exists(TEMPLATEPATH . “/index.php”) )
$template = TEMPLATEPATH . “/index.php”;
return apply_filters(‘home_template’, $template);

其中apply_filters()的作用是:将$templatehook到tag=’home_template’的filters上并返回$template,也就是主题包的路径。


2、有require_once(ABSPATH . WPINC . ‘/template-loader.php’); 调用了./wp-includes/template-loader.php(ABSPATH代表./, WPINC代表/wp-includes)。 而./wp-includes/template-loader.php中有:


} else if ( is_home() && $template = get_home_template() ) {
include($template);
return;

get_home_template()将 主题包路径返回给$template,这里的include($template);语句就把./wp-content/themes/主题名/index.php(比如日志现在所用的主题路径就是./wp-content/ade/index.php)包含进去了。于是开始执到./wp-content/themes/ade/index.php里面的代码了,接下来就是该主题内部的事情了。


主题被调用后,首页的加载过程

各个页面的加载过程大致相同,下面以首页为例说明。显示首页的时候,Wordpress只调用index.php,在index.php定义了要加载那些模板以及其加载顺序。一般情况是:header.php->页面主要内容(index,page,signle等页面都有其自己的定义)->sidebar.php->footer.php


其实对于一个能够提供theme的程序而言,在程序的构架上必须要实现数据和表现的分离。通常我们所说的MVC(Model、View、Controller)架构就是这个意思。


在WordPress中,是这样来实现数据和实现的分离的。 1. XHTML:用Div等用来表现数据,CSS来描述这些数据的表现形式,用这种方式来实现数据和表现的分离; 2. Template的方式:页面各个部分单独保存为一个一个.php文件(如上面的sidebar.php,footer.php等),页面加载时候调用所需代码。


比如<?php comments_template(); ?>就返回了留言框的所需代码。


在比如index中有: <?php get_footer(); ?> <?php get_header(); ?> “get_header”和”get_footer”分别用来得到该页的header和footer,其实就是两个div块儿。index的主体同样是一个大的div(

),在该theme的CSS中即可以看到对这个div的表现定义,包括字体、背景颜色、边距等等。这里唯一的 id=content来告诉浏览器,这个标签内的内容显示在CSS中定义的content部分样式里面。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台