之前建立的主題框架將用作所開發網站的父主題。這意味著,在每一種情況下,你都需要去建立一個子主題,並運用自己的設計以及更多的其他的函式建立一個網站,而這個網站也是唯一的。

最顯而易見的方式是全身心地投入,並開始在你的子主題中建立模板檔案,用來覆蓋框架中的那些原檔案,但由於你已經給你的框架新增了動作掛鉤和過濾掛鉤, 所以這未必就是最好的一種方法。

在這篇文章中,我將重點介紹你可以運用在子主題中的一些技術,從而讓你充分地利用好自己的框架,並能根據需要隨時改善工作流程。

我將介紹的主題如下:

  • 建立初始子 WordPress 主題
  • 透過該框架的過濾掛鉤修改程式碼
  • 透過該框架的行動掛鉤新增程式碼
  • 在你的子主題中建立新的模板檔案
  • 何時使用外掛

建立初始子主題

開發主題框架的主要目的是為了運用 DRY(切勿重複自己) 原則,這也同樣適用於你的子主題。

為框架建立一個或多個 「初始」 子主題會讓你變得更有效率。子主題中包含有你需要在新專案中使用的一些核心程式碼。

在決定如何去建立的同時,有一些關於工作方式和建立網站的問題需要加以考慮:

  • 你是否是在為同一個部門有類似需求的客戶建立網站?
  • 你是否是想給小客戶提供低成本的基於模板的網站?
  • 你是否有能為大多數新專案服務的具體模板檔案?
  • 你的某些網站是否需要具有一些獨特的功能 (例如,我使用的兩個初始子主題,一個有評論功能,另一個就沒有)?
  • 是否有適用於大多數專案的樣式?你能否使用物件導向的樣式或一個 CSS 前處理器來處理大多數專案?
  • 是否有適用於大多數 (或佔有一定顯著比例的) 新專案的程式碼庫或者其他資源?
  • 是否有兩個或三個主要範疇,你可以將一些專案放置於其下,而每個範疇都涉及到類似的開發工作?

如果你對上述某一個問題的回答是肯定的話,那麼建立一個或多個初始子主題就可以節省你的時間。你可以使用一些基本程式碼建立一整套子主題,這些程式碼你在所有專案中都會重複用到,那樣你就不需要為每一個新專案去重寫程式碼 (或建立檔案) 。

注意:如果你要為每一個新專案新增一些程式碼的話,也許你只是想將它新增到你的框架之中,而不是子主題內,將來如果另有需要的話,使用一個掛鉤你就可以將其覆蓋。

即使你對以上問題的回答都是否定的,用空樣式表和函式檔案建立一個非常基本的初始主題,並在樣式表中新增 WordPress 相關說明,來訪問框架父主題,也是很有必要的:

  1. /*
  2.  Theme Name:   My Theme Framework Child
  3.  Theme URI:    
  4.  Description:  Starter Child Theme
  5.  Author:       Rachel McCollin
  6.  Author URI:   http://rachelmccollin.co.uk
  7.  Template:     wptutsplus-theme-framework-part6
  8.  Version:      1.0.0
  9.  Tags:         
  10.  Text Domain:  tutsplus
  11. */
  12.  
  13.  
  14. @import url("../wptutsplus-theme-framework-part6/style.css");

以上必填的欄位是 Theme Name(主題名稱) 和 Template(模板),其餘的都是可填可不填。要確保 Template 使用的是框架主題的地址,而不是它的命名。這也將有助於完成與主題相關的其他欄位。

如果你要載入架構樣式表單的話,那麼該 @import 宣告也很重要。只要你把這個宣告放在任何其他的 CSS 上,它就會在子主題樣式表單的任何樣式之前載入父主題樣式表單,這意味著你可以在子主題框架內根據需要新增或覆蓋樣式。

您可能還需要使用你在子主題中最常用到的函式建立一個初始 functions.php 檔案。然後,您可以選擇將這些函式全部刪除和/或根據具體專案將它們新增到主題中。

透過該框架的過濾掛鉤修改程式碼

在給你的子主題新增樣式之外,你很可能還想要更改由框架輸出的程式碼。最輕巧的方式是透過過濾掛鉤來實現,所以首先要確認你能否使用其中任何一個掛鉤。

為新程式碼建立一個函式,再附上一個過濾掛鉤,這比建立一個全新的模板檔案更加有效;但是,如果你需要使用相同的過濾掛鉤不斷反覆這樣做時,你可能要考慮一下改變鉤連一個動作掛鉤的過濾掛鉤,併為由該行動掛鉤啟用的每一個專案重寫一個新函式。

為了更有效率,你可以建立一整套相關函式,放置在不同初始主題的函式檔案中,或者使用一些函式建立一個外掛,這些函式可以根據需要來啟用。我將在之後的課程中更加詳細地介紹到這個外掛。

我在前面的課程中已經介紹過建立過濾掛鉤的流程。簡單說來,就是使用 add_filter() 函式給一個過濾掛鉤附加一個函式。例如,在修改網站版權標記的連結和名稱時,我建立了兩個函式,如下所示:

  1. function wptp_amend_colophon_name() {
  2.  
  3.     $name = 'Rachel McCollin';
  4.     return $name;
  5.  
  6. }
  7. add_filter( 'wptp_colophon_name', 'wptp_amend_colophon_name' );
  8.  
  9. function wptp_amend_colophon_link() {
  10.  
  11.     $link = 'http://rachelmccollin.co.uk';
  12.     return $link;
  13.  
  14. }
  15. add_filter( 'wptp_colophon_link', 'wptp_amend_colophon_link' );

主題框架中的兩個過濾掛鉤分別是:wptp_colophon_name 和 wptp_colophon_link,它們都可以改變輸出內容。

透過該框架的動作掛鉤新增程式碼

你可以使用主題框架中的動作掛鉤在網站的各個地方插入內容。

如果你是一直跟著本系列教程使用程式碼檔案的,你目前就會有七個行動掛鉤:

  • 在網頁標題之前
  • 在網頁標題之中
  • 在網頁內容之前
  • 在網頁內容之後
  • 在網頁側邊欄中
  • 在網頁頁尾中
  • 在網頁頁尾後

例如,你想呼叫行動按鈕新增到側邊欄,就可以新建一個 sidebar.php 檔案,但是如果使用 wptp_sidebar 掛鉤的話會更高效。

要做到這一點,就得在你的子主題中建立一個 functions.php 檔案並新增以下內容:

  1. function wptp_cta() {?>
  2.  
  3.     <div >
  4.         <p>Email us on <a href="mailto:mail@example.com">mail@example.com</a></p>
  5.     </div>
  6.  
  7. <?php
  8. }
  9. add_action( 'wptp_sidebar', 'wptp_cta', 1 )

該 wptp_cta() 函式為呼叫行動掛鉤建立了一個標記,並透過 wptp_sidebar 掛鉤由 add_action() 函式啟用,因為這個掛鉤優先順序為 1,所以它會出現在其他任何內容被觸發之前。

使用動作掛鉤你還可以新增大量其他的內容,比如頁面內容之前/後的共享按鈕、頁尾中的其他內容、標題中的搜尋框等等。

你可能只是想給特定的網頁型別新增一些內容,比如單部落格文章 (single blog posts) 。在這種情況下,最顯而易見的方式是先新建一個 single.php 模板。其實,你仍然可以使用行動掛鉤,外加一個條件標籤就行了:

  1. function wptp_after_single_posts() {
  2.  
  3.     if( is_singular( 'post' ) ) { ?>
  4.  
  5.         <h3>Enjoyed this? Try reading more!</h3>
  6.  
  7.         <?php
  8.         // query to list latest blog posts here
  9.  
  10.     }
  11.  
  12. }
  13. add_action( 'wptp_after_content', 'wptp_after_single_posts' );

這會建立一個新的查詢 (使用 WP_Query)——輸出最新的部落格文章列表,這是為了鼓勵訪客在閱讀完一篇部落格文章後再讀點別的東西。該 is_singular( 'post' ) 條件標籤確保了只能輸出一篇文章,並將其連線到 wptp_after_content 掛鉤上,它會顯示在主體文章的內容之後。

在你的子主題中建立新的模板檔案

有時,僅僅使用過濾掛鉤或動作掛鉤並不能達到目的,在這種情況下,你需要在你的子主題中建立新的模板檔案。

這些檔案可能和儲存在你的框架中的模板檔案是相同的,這種情況下,在子主題中的檔案將會覆蓋它們。但也有可能它們是新的模板檔案,例如一個新的範疇、分類或文章型別。

如果在一開始,你就在子主題中建立並使用了模板檔案,事情就會變得容易得多。我遵循的步驟是:

  1. 確定你需要建立的模板檔案,參照 WordPress 模板層次結構 (WordPress template hierarchy)
  2. 在你的子主題中建立一個有相應名稱的空白檔案
  3. 確定框架中的檔案,該檔案與新檔案關係最緊密 (請再次參照模板層次結構)
  4. 將內容複製到你的新檔案中
  5. 按要求修改新檔案

這樣做就不用複製任何程式碼,而這些程式碼在新檔案和現有檔案裡是相同的,如呼叫包括檔案 (include files) 。

何時使用外掛

根據你的框架建立網站時,你還有一個選擇是結合你的子主題使用外掛。一個外掛並不會完全取代子主題,但它在下列情況下會非常有效:

  • 你要新增的功能與主題無關 (要保持它不變,即使將來該網站改變了主題) 。這可能包括註冊自定義文章型別或分類。
  • 你想在你建立的眾多網站上使用某個功能,但它又不能直接新增到初始子主題或框架本身之中。

我會在下一課介紹如何為你的框架開發外掛。

小結

目前,你建立的程式碼庫和支援你開發網站的所有檔案只是建立主題框架的一個起點。每個建立的網站需要執行在一個子主題上,你的主題框架就是其父主題。

正如我們所看到的,你子主題會加入自己的風格和功能,它們透過框架的動作掛鉤和過濾掛鉤,或者透過建立新的模板檔案做到這一點。採用最少的程式碼來解決問題總是好的,因為它可以讓你的網站執行更快,你的工作也會變得更加輕鬆!