製作簡單的 WordPress 模板非常容易,但為了在開發製作模板時合理利用資源及提高工作效率,知道 WordPress 模板檔案層次,瞭解 WordPress 是如何載入模板檔案是非常有必要的。下面是多夢網路對 WordPress 模板檔案層次的詳細介紹,推薦!

WordPress 模板載入順序

下面讓我們來瞭解一下 WordPress 都是怎麼載入模板的

首頁

  1. 首先 WordPress 會先檢查是否有靜態首頁,如果有靜態首頁,就會載入這個頁面內容並透過 front-page.php 模板檔案展示,如果沒有這個 WordPress 模板檔案,就會透過頁面模板展示
  2. 如果沒有靜態首頁,就會載入 home.php  最新文章模板
  3. 如果沒有 home.php 則載入 index.php 模板

文章頁

  1. 首先被考慮的是 single-{post_type}.php 這樣一個模板檔案 (如文章型別是 product 那麼對應的檔名就是 single-product.php)
  2. 如果找不到,那麼就會載入 single.php 模板
  3. 如果連 single.php 模板都沒有則載入 index.php 模板。

頁面

  1. 首先被考慮的是自定義模板,也就是編輯頁面時所選擇的模板
  2. 如果沒有自定義模板,則查詢 page-{slug}.php 別名模板 (如頁面別名是 about 對應的檔名就是 page-about.php)
  3. 如果別名模板也沒有就查詢 page-{id}.php ID 模板 (如頁面 ID 是 2 對應的檔名就是 page-2.php)
  4. 如果 ID 模板也沒有那就是 page.php 模板了
  5. 如果連 page.php 模板都沒有則載入 index.php 模板

分類頁

  1. 首先被考慮的是 category-{slug}.php 別名模板 (如分類別名是 news 對應的檔名就是 category-news.php)
  2. 如果沒有別名模板則查詢 category-{id}.php ID 模板 (如分類 ID 是 1 對應的檔名就是 category-1.php)
  3. 如果 ID 模板也沒有那就是 category.php 分類別範本了
  4. 如果 category.php 分類別範本也沒有則載入 archive.php 通用歸檔模板
  5. 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板

標籤頁

標籤頁模板載入順序和分類頁一樣,只不過字首不過 category 而是 tag(如 tag-{slug}.php) 。

自定義分類法

有時候除了 WordPress 預設的分類目錄和標籤我們還需要其他的分類方法,這時候我們就會註冊一個新的分類法,那麼在此之前知道分類法的模板載入順序也是十分必要的。以下說明假設自定義分類法是 people 這個名字:

  1. 分類法分類頁首先被考慮的是 taxonomy-{taxonomy}-{term}.php 別名模板 (如分類別名 teacher 對應的檔名就是 taxonomy-people-teacher.php )
  2. 如果沒有別名模板,則載入該分類法歸檔頁 (如 taxonomy-people.php)
  3. 如果分類法歸檔頁模板也沒有則載入 archive.php 通用歸檔模板
  4. 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板

自定義文章型別

除了自定義分類法,有時候我們也需要自定義文章型別

  1. 自定義文章型別歸檔頁首先被考慮的是 archive-{post_type}.php 別名模板 (如文章型別是 product 那麼對應的檔名就是 archive-product.php)
  2. 如果沒有別名模板則載入 archive.php 通用歸檔模板
  3. 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板

作者歸檔頁

  1. 首先被考慮的是 author-{nicename}.php 別名模板 (如作者使用者名稱是 steven 那麼對應的檔名就是 author-steven.php)
  2. 如果沒有別名模板則載入 author-{id}.php ID 模板 (如作者 ID 是 1 對應的檔名就是 author-1.php)
  3. 如果 ID 模板沒有則載入 author.php 通用作者模板
  4. 如果通用作者模板也沒有則載入 archive.php 通用歸檔模板
  5. 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板

日期歸檔頁

  1. 首先被考慮的是 date.php 日期歸檔模板
  2. 如果日期歸檔模板沒有則載入 archive.php 通用歸檔模板
  3. 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板

搜尋結果頁

  1. 首先被考慮的是 search.php 搜尋結果模板
  2. 如果沒有搜尋結果模板則載入 index.php 模板

附件頁

  1. 首先會按 MIME 型別載入模板 (如 image.php, video.php, application.php,而 text/plain 型別則按順序嘗試載入 text.php, plain.php, text_plain.php 這三個檔案。
  2. 如果沒有對應的 MIME 型別模板則 attachment.php 附件模板 (如沒有 attachment.php 則載入 single-attachment.php)
  3. 如果沒有附件模板則載入 single.php 文章頁模板
  4. 如果連 single.php 文章頁模板都沒有則載入 index.php 模板

模板層次圖

上面用文字詳細講述了 WordPress 模板的載入順序,儘管詳細,但還不如一張資訊圖更為直觀,以下就是 WordPress 的模板層次結構圖。 (點選圖片可在新視窗檢視大圖)

製作主題必備 WordPress 模板檔案層次詳細介紹

使用鉤子修改模板

在某些使用場景 (如外掛),我們並不能直接修改模板檔案,這時候我們可以使用鉤子來實現修改模板檔案,鉤子名稱是 {$type}_template 這樣的格式,以下是對應的完整的鉤子名稱列表:

  • index_template
  • 404_template
  • archive_template
  • author_template
  • category_template
  • tag_template
  • taxonomy_template
  • date_template
  • home_template
  • front_page_template
  • page_template
  • paged_template
  • search_template
  • single_template
  • text_template, plain_template, text_plain_template (all mime types)
  • attachment_template
  • comments_popup

以下是一個使用例子 (讓頁面載入 single.php 文章頁的模板):

function page_template_filter( $templates='' ){ $templates=locate_template("single.php",false); return $templates;}add_filter( 'page_template', 'page_template_filter' );

模板頁面判斷

一般情況下,在一個特定的模板中我們能清楚知道應該怎麼輸出特定的樣式和內容,但在一些通用模板中 (如 header.php) 我們想要知道使用者當前訪問的是哪個頁面模板就需要藉助 WordPress 內建的條件判斷函式了,這些函式可以幫助我們判斷當前是什麼頁面以方便載入不同的模板內容,如 is_home() 則是判斷首頁的條件標籤,is_single() 則是判斷文章頁的條件標籤,等等。