WordPress子主題也是一個主題,它繼承了另一個主題——父主題——的功能,并允許你對父主題的功能進行修改,或者添加新功能。本文將說明如何創(chuàng)建一個基本的子主題并解釋您能用它來干什么。本文將使用?WordPress 3.0?的默認主題 Twenty Ten 作為父主題進行舉例說明。
- 原文來源:詳情
創(chuàng)建一個子主題是很簡單的。創(chuàng)建一個目錄,將格式編寫正確的?style.css?文件放進去,一個子主題就做成了!只需要對 HTML 和?CSS?具有基本的了解,您就可以通過創(chuàng)建一個非常基本的子主題?來對一個父主題的樣式和布局進行修改和擴展,而不需要對父主題的文件作任何修改。通過這樣的方式,當父主題被更新的時候,您所做的修改就可以保存下來。
因為這個原因,我們強烈推薦您使用子主題的方式來對主題進行修改。
如果您對 PHP,?WordPress Templates,和?WordPress Plugin API有個基本的理解,理論上來講,您可以使用子主題對父主題的每一個方面進行擴展,而不需要對父主題的文件進行任何修改。
目錄結構
子主題放在wp-content/themes目錄下屬于自己的目錄里。下面的結構顯示的就是子主題和它的父主題(Twenty Ten)在典型的WordPress目錄結構中的位置:
- public_html
- wp-content
- themes?(主題存放的目錄)
- twentyten?(示例中父主題Twenty Ten的目錄)
- twentyten-child?(子主題存放的目錄,可以任意命名)
- style.css?(子主題中不可或缺的文件,文件名必需為 style.css)
- themes?(主題存放的目錄)
- wp-content
這個文件夾里面可以少至只包含一個style.css文件,也可以包含多至一個完整WordPress主題所擁有的文件:
- style.css (必需)
- functions.php (可選)
- Template files (可選)
- Other files (可選)
讓我們看看它們是如何起作用的。
必需的style.css文件
style.css是一個子主題唯一必須的文件。它的頭部提供的信息讓WordPress辨認出子主題,并且重寫父主題中的style.css文件。
對于任何WordPress主題,頭部信息必須位于文件的頂端,唯一的區(qū)別就是子主題中的Template:
行是必須的,因為它讓WordPress知道子主題的父主題是什么。
下面是一個style.css文件的頭部信息的示例:
/*
Theme Name: Twenty Ten Child
Theme URI: http: //example.com/
Description: Child theme for the Twenty Ten theme
Author: Your name here
Author URI: http: //example.com/about/
Template: twentyten
Version: 0.1.0
*/
逐行的簡單解釋:
Theme Name
. (必需) 子主題的名稱。Theme URI
. (可選) 子主題的主頁。Description
. (可選) 子主題的描述。比如:我的第一個子主題,真棒!Author URI
. (可選) 作者主頁。Author
. (optional) 作者的名字。Template
. (必需) 父主題的目錄名,區(qū)別大小寫。?注意:?當你更改子主題名字時,要先換成別的主題。Version
. (可選) 子主題的版本。比如:0.1,1.0,等。
*/
這個關閉標記的后面部分,就會按照一個常規(guī)的樣式表文件一樣生效,你可以把你想對WordPress應用的樣式規(guī)則都寫在它的后面。
要注意的是,子主題的樣式表會替換父主題的樣式表而生效。(事實上WordPress根本就不會載入父主題的樣式表。)所以,如果你想簡單地改變父主題中的一些樣式和結構——而不是從頭開始制作新主題——你必須明確的導入父主題的樣式表,然后對它進行修改。下面的例子告訴你如何使用@import
規(guī)則完成這個。
一個子主題的范例
這個例子中的父主題是Twenty Ten,我們喜歡這個主題的幾乎每個部分,除了網(wǎng)站標題的顏色,因為我想把它從黑色的改成綠色的。使用子主題的話,只用完成以下三個簡單的步驟:
- 在wp-content/themes目錄下創(chuàng)建一個新目錄,并將它命名為twentyten-child(或其他你喜歡的名稱)。
- 將下面的代碼保存在名為style.css的文件里,并將它放到新建的這個文件夾。
- 到WordPress的控制臺>主題,然后激活你的新主題:Twenty Ten Child。
/*
Theme Name: Twenty Ten Child
Description: Child theme for the Twenty Ten theme
Author: Your name here
Template: twentyten
*/
@import url("../twentyten/style.css");
#site-title a {
color: #009900;
}
下面一步步解釋上面代碼的作用:
/*
?開啟子主題的頭部信息。Theme Name:
?子主題名稱的聲明。Description:
?主題的描述(可選,也可被省略)。Author:
?作者名字的聲明(可選,也可被省略)。Template:
?聲明子主題的父主題,換言之,父主題所在的文件夾的名稱,區(qū)分大小寫。*/
子主題頭部信息的關閉標記。- 用?
@import
規(guī)則將父主題的樣式表調入 #site-title a
?定義網(wǎng)站標題的顏色(綠色),覆蓋父主題中相同的樣式規(guī)則。
注意?@import
?規(guī)則
需要注意的是,@import
?規(guī)則之前沒有其他的CSS樣式規(guī)則,如果你將其他的規(guī)則置于它之上,那么它將無效,并且父主題的樣式表不會被導入。
使用 functions.php
不像style.css,子主題中的functions.php不會覆蓋父主題中對應功能,而是將新的功能加入到父主題的functions.php中。(其實它會在父主題文件加載之前先載入。)
這樣,子主題的functions.php提供了一個靈活穩(wěn)定的方式來修改父主題的功能。如果你想在你的主題里加入一些PHP函數(shù),最快的方式可能是打開functions.php文件然后加入進去。但那樣并不靈活:下次你的主題升級更新了,你加入的新功能就會丟失掉。相反地,如果你使用子主題,將functions.php文件放進去,再將你想加入的功能寫進這個文件里,那么這個功能同樣會工作得很好,并且對于父主題以后的升級更新,子主題中加入的功能也不會受到影響。
functions.php文件的結構非常簡單:將PHP起始標簽置于頂部,關閉標簽置于底部,它們之間就寫上你自己的PHP函數(shù)。你可以寫得很多,也可以寫得很少,反正按你所需。下面的示例是一個基本的functions.php文件的寫法,作用是將favicon鏈接加入到HTML頁面的head元素里面。
<?php
function favicon_link() {
echo '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />' . "\n";
}
add_action('wp_head', 'favicon_link');
?>
給主題作者的提示。事實上子主題的functions.php首先加載意味著你的主題的用戶功能可插入——即子主題是可替換的——通過有條件地進行聲明。例如:
if (!function_exists('theme_special_nav')) {
function theme_special_nav() {
// Do something.
}
}
注意,替換的過程是在父級主題中,使用php的function_exits進行判斷。 用這種方式,子主題可以替換父主題中的一個PHP函數(shù),只需要簡單地對它再次聲明。
模板文件
模板文件?在子主題中的表現(xiàn)和style.css一樣,它們會覆蓋父主題中的相同文件。子主題可以覆蓋任何父主題模板中的文件,只需要創(chuàng)建同名文件就行。(注意:index.php在WordPress3.0及以上版本才能被覆蓋。)
同樣,這項WordPress的功能允許你修改父主題的樣式功能而不用去編輯父主題的文件,并且你的修改能讓你在更新父主題后繼續(xù)保留。
下面是一些使用模板文件的子主題的例子:
- 增加一個父主題沒有提供的模板(例如:網(wǎng)站地圖頁面的模板,或者一單欄頁面,它們在頁面編輯,模板選擇里是可用的)
- 增加一個比父模板更加具體的模板(見模板級別)。(例如:新加的tag.php模板用于按tag歸檔的文章來代替父主題中通常的archive.php模板。)
- 替換父主題中的一個模板.(例:使用你自己的home.php來覆蓋父主題中的home.php)
其他文件
除了style.css,functions.php,index.php和home.php,子主題可以使用任何正式主題使用的類型的文件,只要文件被正確鏈接。打個比方,你可以使用在樣式表里或者Javascript文件里鏈接的圖標、圖片,或者從functions.php文件中調用出來的額外PHP文件。