之前建立的主題框架將用作所開發網站的父主題。這意味著,在每一種情況下,你都需要去創建一個子主題,并運用自己的設計以及更多的其他的函數創建一個網站,而這個網站也是唯一的。
最顯而易見的方式是全身心地投入,并開始在你的子主題中創建模板文件,用來覆蓋框架中的那些原文件,但由于你已經給你的框架添加了動作掛鉤和過濾掛鉤, 所以這未必就是最好的一種方法。
在這篇文章中,我將重點介紹你可以運用在子主題中的一些技術,從而讓你充分地利用好自己的框架,并能根據需要隨時改善工作流程。
我將介紹的主題如下:
創建初始子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 class="cta">
<p>Email us on <a href="mailto:[email protected]">[email protected]</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)。
何時使用插件
根據你的框架創建網站時,你還有一個選擇是結合你的子主題使用插件。一個插件并不會完全取代子主題,但它在下列情況下會非常有效:
你要添加的功能與主題無關(要保持它不變,即使將來該網站改變了主題)。這可能包括注冊自定義文章類型或分類。
你想在你創建的眾多網站上使用某個功能,但它又不能直接添加到初始子主題或框架本身之中。
我會在下一課介紹如何為你的框架開發插件。
小結
目前,你建立的代碼庫和支持你開發網站的所有文件只是創建主題框架的一個起點。每個創建的網站需要運行在一個子主題上,你的主題框架就是其父主題。
正如我們所看到的,你子主題會加入自己的風格和功能,它們通過框架的動作掛鉤和過濾掛鉤,或者通過創建新的模板文件做到這一點。采用最少的代碼來解決問題總是好的,因為它可以讓你的網站運行更快,你的工作也會變得更加輕松!
新聞熱點
疑難解答