之前建立的主題框架將用作所開發網站的父主題。這意味着,在每一種情況下,你都需要去創建一個子主題,並運用自己的設計以及更多的其他的函數創建一個網站,而這個網站也是唯一的。
最顯而易見的方式是全身心地投入,並開始在你的子主題中創建模板文件,用來覆蓋框架中的那些原文件,但由於你已經給你的框架添加了動作掛鈎和過濾掛鈎, 所以這未必就是最好的一種方法。
在這篇文章中,我將重點介紹你可以運用在子主題中的一些技術,從而讓你充分地利用好自己的框架,並能根據需要隨時改善工作流程。
我將介紹的主題如下:
- 創建初始子 WordPress 主題
- 通過該框架的過濾掛鈎修改代碼
- 通過該框架的行動掛鈎添加代碼
- 在你的子主題中建立新的模板文件
- 何時使用插件
創建初始子主題
開發主題框架的主要目的是為了運用 DRY(切勿重複自己) 原則,這也同樣適用於你的子主題。
為框架創建一個或多個 「初始」 子主題會讓你變得更有效率。子主題中包含有你需要在新項目中使用的一些核心代碼。
在決定如何去創建的同時,有一些關於工作方式和建立網站的問題需要加以考慮:
- 你是否是在為同一個部門有類似需求的客户創建網站?
- 你是否是想給小客户提供低成本的基於模板的網站?
- 你是否有能為大多數新項目服務的具體模板文件?
- 你的某些網站是否需要具有一些獨特的功能 (例如,我使用的兩個初始子主題,一個有評論功能,另一個就沒有)?
- 是否有適用於大多數項目的樣式?你能否使用面向對象的樣式或一個 CSS 預處理器來處理大多數項目?
- 是否有適用於大多數 (或佔有一定顯著比例的) 新項目的代碼庫或者其他資源?
- 是否有兩個或三個主要範疇,你可以將一些項目放置於其下,而每個範疇都涉及到類似的開發工作?
如果你對上述某一個問題的回答是肯定的話,那麼創建一個或多個初始子主題就可以節省你的時間。你可以使用一些基本代碼創建一整套子主題,這些代碼你在所有項目中都會重複用到,那樣你就不需要為每一個新項目去重寫代碼 (或創建文件) 。
注意:如果你要為每一個新項目添加一些代碼的話,也許你只是想將它添加到你的框架之中,而不是子主題內,將來如果另有需要的話,使用一個掛鈎你就可以將其覆蓋。
即使你對以上問題的回答都是否定的,用空樣式表和函數文件創建一個非常基本的初始主題,並在樣式表中添加 WordPress 相關説明,來訪問框架父主題,也是很有必要的:
-
/* -
Theme Name: My Theme Framework Child -
Theme URI: -
Description: Starter Child Theme -
Author: Rachel McCollin -
Author URI: http://rachelmccollin.co.uk -
Template: wptutsplus-theme-framework-part6 -
Version: 1.0.0 -
Tags: -
Text Domain: tutsplus -
*/ -
-
-
@import url("../wptutsplus-theme-framework-part6/style.css");
以上必填的字段是 Theme Name(主題名稱) 和 Template(模板),其餘的都是可填可不填。要確保 Template 使用的是框架主題的地址,而不是它的命名。這也將有助於完成與主題相關的其他字段。
如果你要加載架構樣式表單的話,那麼該 @import 聲明也很重要。只要你把這個聲明放在任何其他的 CSS 上,它就會在子主題樣式表單的任何樣式之前加載父主題樣式表單,這意味着你可以在子主題框架內根據需要添加或覆蓋樣式。
您可能還需要使用你在子主題中最常用到的函數建立一個初始 functions.php 文件。然後,您可以選擇將這些函數全部刪除和/或根據具體項目將它們添加到主題中。
通過該框架的過濾掛鈎修改代碼
在給你的子主題添加樣式之外,你很可能還想要更改由框架輸出的代碼。最輕巧的方式是通過過濾掛鈎來實現,所以首先要確認你能否使用其中任何一個掛鈎。
為新代碼創建一個函數,再附上一個過濾掛鈎,這比建立一個全新的模板文件更加有效;但是,如果你需要使用相同的過濾掛鈎不斷反覆這樣做時,你可能要考慮一下改變鈎連一個動作掛鈎的過濾掛鈎,併為由該行動掛鈎激活的每一個項目重寫一個新函數。
為了更有效率,你可以創建一整套相關函數,放置在不同初始主題的函數文件中,或者使用一些函數創建一個插件,這些函數可以根據需要來激活。我將在之後的課程中更加詳細地介紹到這個插件。
我在前面的課程中已經介紹過創建過濾掛鈎的流程。簡單説來,就是使用 add_filter() 函數給一個過濾掛鈎附加一個函數。例如,在修改網站版權標記的鏈接和名稱時,我創建了兩個函數,如下所示:
-
function wptp_amend_colophon_name() {
-
-
$name = 'Rachel McCollin';
-
return $name;
-
-
} -
add_filter( 'wptp_colophon_name', 'wptp_amend_colophon_name' );
-
-
function wptp_amend_colophon_link() {
-
-
$link = 'http://rachelmccollin.co.uk';
-
return $link;
-
-
} -
add_filter( 'wptp_colophon_link', 'wptp_amend_colophon_link' );
主題框架中的兩個過濾掛鈎分別是:wptp_colophon_name 和 wptp_colophon_link,它們都可以改變輸出內容。
通過該框架的動作掛鈎添加代碼
你可以使用主題框架中的動作掛鈎在網站的各個地方插入內容。
如果你是一直跟着本系列教程使用代碼文件的,你目前就會有七個行動掛鈎:
- 在網頁標題之前
- 在網頁標題之中
- 在網頁內容之前
- 在網頁內容之後
- 在網頁側邊欄中
- 在網頁頁腳中
- 在網頁頁腳後
例如,你想調用行動按鈕添加到側邊欄,就可以新建一個 sidebar.php 文件,但是如果使用 wptp_sidebar 掛鈎的話會更高效。
要做到這一點,就得在你的子主題中建立一個 functions.php 文件並添加以下內容:
-
function wptp_cta() {?> -
-
<div >
-
<p>Email us on <a href="mailto:mail@example.com">mail@example.com</a></p>
-
</div>
-
-
<?php -
} -
add_action( 'wptp_sidebar', 'wptp_cta', 1 )
該 wptp_cta() 函數為調用行動掛鈎創建了一個標記,並通過 wptp_sidebar 掛鈎由 add_action() 函數激活,因為這個掛鈎優先級為 1,所以它會出現在其他任何內容被觸發之前。
使用動作掛鈎你還可以添加大量其他的內容,比如頁面內容之前/後的共享按鈕、頁腳中的其他內容、標題中的搜索框等等。
你可能只是想給特定的網頁類型添加一些內容,比如單博客文章 (single blog posts) 。在這種情況下,最顯而易見的方式是先新建一個 single.php 模板。其實,你仍然可以使用行動掛鈎,外加一個條件標籤就行了:
-
function wptp_after_single_posts() { -
-
if( is_singular( 'post' ) ) { ?> -
-
<h3>Enjoyed this? Try reading more!</h3>
-
-
<?php -
// query to list latest blog posts here -
-
} -
-
} -
add_action( 'wptp_after_content', 'wptp_after_single_posts' );
這會創建一個新的查詢 (使用 WP_Query)——輸出最新的博客文章列表,這是為了鼓勵訪客在閲讀完一篇博客文章後再讀點別的東西。該 is_singular( 'post' ) 條件標籤確保了只能輸出一篇文章,並將其連接到 wptp_after_content 掛鈎上,它會顯示在主體文章的內容之後。
在你的子主題中建立新的模板文件
有時,僅僅使用過濾掛鈎或動作掛鈎並不能達到目的,在這種情況下,你需要在你的子主題中創建新的模板文件。
這些文件可能和存儲在你的框架中的模板文件是相同的,這種情況下,在子主題中的文件將會覆蓋它們。但也有可能它們是新的模板文件,例如一個新的範疇、分類或文章類型。
如果在一開始,你就在子主題中創建並使用了模板文件,事情就會變得容易得多。我遵循的步驟是:
- 確定你需要創建的模板文件,參照 WordPress 模板層次結構 (WordPress template hierarchy)
- 在你的子主題中建立一個有相應名稱的空白文件
- 確定框架中的文件,該文件與新文件關係最緊密 (請再次參照模板層次結構)
- 將內容複製到你的新文件中
- 按要求修改新文件
這樣做就不用複製任何代碼,而這些代碼在新文件和現有文件裏是相同的,如調用包括文件 (include files) 。
何時使用插件
根據你的框架創建網站時,你還有一個選擇是結合你的子主題使用插件。一個插件並不會完全取代子主題,但它在下列情況下會非常有效:
- 你要添加的功能與主題無關 (要保持它不變,即使將來該網站改變了主題) 。這可能包括註冊自定義文章類型或分類。
- 你想在你創建的眾多網站上使用某個功能,但它又不能直接添加到初始子主題或框架本身之中。
我會在下一課介紹如何為你的框架開發插件。
小結
目前,你建立的代碼庫和支持你開發網站的所有文件只是創建主題框架的一個起點。每個創建的網站需要運行在一個子主題上,你的主題框架就是其父主題。
正如我們所看到的,你子主題會加入自己的風格和功能,它們通過框架的動作掛鈎和過濾掛鈎,或者通過創建新的模板文件做到這一點。採用最少的代碼來解決問題總是好的,因為它可以讓你的網站運行更快,你的工作也會變得更加輕鬆!