很多用 WordPress 的同學都會有一個困惑,雖然很多主題都提供了豐富的設置,但是難免每個人的需求都不一樣,不可能都顧及,這時就必須得修改主題文件來實現需要的效果。
但是在主題升級之後,修改過之後的文件就會被覆蓋,又得再次修改,實在是麻煩。針對這一點,WordPress 使用了一個叫子主題的功能來解決。
所謂子主題,就是引用另一個主題同時又比被引用的主題優先級高的主題,當你製作一個子主題,並把子主題鏈接到相應的父主題上,如果在子主題裏有模板文件就會優先使用,子主題裏沒有模板文件才會繼續調用父主題的模板文件 (functions.php 除外,如果子主題和父主題都存在 functions.php 函數模板,那麼會按先子主題後父主題的順序同時引入) 。
簡單來説,子主題也是主題,繼承了父主題功能的同時又會覆蓋父主題的功能,利用子主題,可以修改和定製父主題,而且不同擔心父主題更新導致修改失效,因為子主題一直會存在。
創建子主題
子主題也可以看做一個單獨的主題,他只需要在主題目錄裏放一個 style.css 並在文件裏寫上一些信息就能生效。
下邊是一個清晰的目錄結構:
- wp-content
- themes(主題目錄)
- 薇曉朵 (父主題目錄)
- index.php(必須)
- style.css(必須)
- functions.php
- header.php
- footer.php
- (完整的模板)……
- 薇曉朵-Child(子主題目錄)
- style.css(必須)
- functions.php
- (可選部分的模板文件,會覆蓋同名的父主題模板文件)……
- 薇曉朵 (父主題目錄)
- themes(主題目錄)
style.css
style.css 文件的內容決定了子主題的重要基本信息,下圖是一個例子,框出來的部分是必須的信息:

|
/* Theme Name: 薇曉朵 Child Theme URI: http://www.weixiaoduo.com Description: The template by <a href="http://www.bgbk.org"> 斌果</a>. Author: 斌果 Author URI: http://www.bgbk.org Template: 薇曉朵 Version: 1.0 */ |
代碼解釋:
- Theme Name(必須):子主題名字
- Theme URI(可選):子主題的頁面
- Description(可選):子主題的描述
- Author(可選):子主題作者
- Author URI(可選):子主題作者的網站
- Template(必須):父主題目錄名,區分大小寫
- Version(可選):子主題版本
主要看加亮的必須參數就好,名字沒什麼好説,會在後台顯示;Template 要注意,決定子主題歸屬於哪個父主題,要填寫父主題目錄名。
插件創建子主題
有一個叫做 Orbisius Child Theme Creator 的插件,可以一鍵創建子主題,我並沒有測試,感興趣的同學可以嘗試一下。
啓用子主題
經過上邊的操作,回到後台的主題頁面就可以看到剛才創建的子主題了,啓用它。

可以發現和啓用父主題的效果是完全一樣的,只是主題的名字變成了 「薇曉朵 Child」 。
利用子主題定製父主題
子主題最終的用途是來定製父主題,比如要定製首頁的內容,只需要把相應的模板文件放在子主題目錄,WordPress 檢測到就會自動優先調用。
functions.php
子主題比較特殊的一個文件是 functions.php,他不會被覆蓋,而是按子父主題順序同時引入。
利用 functions.php 這個文件就可以最大化的定製主題,不過需要父主題的配合和以及一定的 WordPress 插件 API 知識。
下邊的例子在 head 標籤裏添加響應式網頁的元信息:
|
functionBing_add_responsive_meta(){ echo'<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0" />'; } add_action('wp_head','Bing_add_responsive_meta'); |