基本思想php
PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。css
PHP代碼的能夠完成功能:顯示出html的字符串標籤的代碼。WordPress的首頁index.php的get_header()、get_sidebar()、get_footer()等函數返回的結果用echo輸出是帶有html標籤的代碼段。html
<!--條件判斷--> <?php if (is_category()) { ?> <div class=」pagetitle」>‘<?php single_cat_title(); ?>’ 分類下的文章</div> <!–顯示下面是哪一個分類下的文章列表,‘ ’ 分別是左右單引號,下同–> <?php } else if( is_tag() ) { ?> <div class=」pagetitle」>‘<?php single_tag_title(); ?>’ 標籤下的文章</div> ………… <?php } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?> <div class=」pagetitle」>日誌歸檔</div> <?php } ?>
當瀏覽器向apache發送請求要獲得博客主頁的HTML代碼時,./index.php被調用。./index.php中的require(‘./wp-blog-header.php’);調用./wp-blog-header.php。
而./wp-blog-header.php作了一些連接數據庫包含頭文件等處理,其中有兩件事情與主題調用有關:
一、有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()的做用是:將$template hook到tag=’home_template’的filters上並返回$template,也就是主題包的路徑。apache
二、有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.phpapp
其實對於一個可以提供theme的程序而言,在程序的構架上必需要實現數據和表現的分離。一般咱們所說的MVC(Model、View、Controller)架構就是這個意思。ide
在WordPress中,是這樣來實現數據和實現的分離的。
1. XHTML:用Div等用來表現數據,CSS來描述這些數據的表現形式,用這種方式來實現數據和表現的分離;
2. Template的方式:頁面各個部分單獨保存爲一個一個.php文件(如上面的sidebar.php,footer.php等),頁面加載時候調用所需代碼。wordpress
好比<?php comments_template(); ?>就返回了留言框的所需代碼。
在好比index中有:
<?php get_footer(); ?>
<?php get_header(); ?>
「get_header」和」get_footer」分別用來獲得該頁的header和footer,其實就是兩個div塊兒。index的主體一樣是一個大的div(<div id=」content」>),在該theme的CSS中便可以看到對這個div的表現定義,包括字體、背景顏色、邊距等等。這裏惟一的 id=content來告訴瀏覽器,這個標籤內的內容顯示在CSS中定義的content部分樣式裏面。