很多用 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
        • (可選部分的模板檔案,會覆蓋同名的父主題模板檔案)……

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');