WordPress主題機制的運行原理

基本思想php

PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。css

PHP代碼的能夠完成功能:顯示出html的字符串標籤的代碼。WordPress的首頁index.php的get_header()、get_sidebar()、get_footer()等函數返回的結果用echo輸出是帶有html標籤的代碼段。html

主題包各文件說明

  • header.php:這個文件中包含博客的標題(title),描述(description),tag,以及css等信息。
  • sidebar.php:這個文件控制你側邊欄中的顯示方式。
  • footer.php:控制頁面底部的顯示,包括ICP,版權聲明等信息。
  • archive.php:被系統調用用於顯示用戶提交分類,按日期歸檔,tag等查詢後顯示的頁面。下面代碼顯示了archive.php內部是如何辨別不一樣的查詢請求的:
<!--條件判斷-->
<?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 } ?>
  • 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作了一些連接數據庫包含頭文件等處理,其中有兩件事情與主題調用有關:
一、有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部分樣式裏面。

相關文章
相關標籤/搜索