WordPress 模板的定義非常方便,但是在定製模板之前,我們有必要知道 WordPress 的模板層次,瞭解 WordPress 是如何載入模板檔案的,這將有利於開發模板時合理利用資源及提高工作效率。
萬能的 index.php
透過“WordPress 主題構成” 這篇文章,我們已知道一個最簡單的 WordPress 主題只需要 style.css 和 index.php 檔案即可。這代表著 index.php 可以是任何一個頁面的模板,無論是首頁,還是文章頁,或是分類頁,再或者是搜尋結果頁面,它都能完美勝任。
也就是說,當對應的模板不存在時, index.php 將是 WordPress 最後的底牌。
模板載入順序
下面讓我們來瞭解一下 WordPress 都是怎麼載入模板的
首頁
- 首先 WordPress 會先檢查是否有靜態首頁,如果有靜態首頁,就會載入這個頁面內容並透過 front-page.php 模板檔案展示,如果沒有這個模板檔案,就會透過頁面模板展示
- 如果沒有靜態首頁,就會載入 home.php
- 最新文章模板 如果沒有 home.php 則載入 index.php 模板
文章頁
- 首先被考慮的是 single-{post_type}.php 這樣一個模板檔案 (如文章型別是 product 那麼對應的檔名就是 single-product.php)
- 如果找不到,那麼就會載入 single.php 模板
- 如果連 single.php 模板都沒有則載入 index.php 模板。
頁面
- 首先被考慮的是自定義模板,也就是編輯頁面時所選擇的模板
- 如果沒有自定義模板,則查詢 page-{slug}.php 別名模板 (如頁面別名是 about 對應的檔名就是 page-about.php)
- 如果別名模板也沒有就查詢 page-{id}.php ID 模板 (如頁面 ID 是 2 對應的檔名就是 page-2.php)
- 如果 ID 模板也沒有那就是 page.php 模板了
- 如果連 page.php 模板都沒有則載入 index.php 模板
分類頁
- 首先被考慮的是 category-{slug}.php 別名模板 (如分類別名是 news 對應的檔名就是 category-news.php)
- 如果沒有別名模板則查詢 category-{id}.php ID 模板 (如分類 ID 是 1 對應的檔名就是 category-1.php)
- 如果 ID 模板也沒有那就是 category.php 分類別範本了
- 如果 category.php 分類別範本也沒有則載入 archive.php 通用歸檔模板
- 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板
標籤頁
- 標籤頁模板載入順序和分類頁一樣,只不過字首不過 category 而是 tag(如 tag-{slug}.php) 。
自定義分類法
有時候除了 WordPress 預設的分類目錄和標籤我們還需要其他的分類方法,這時候我們就會註冊一個新的分類法,那麼在此之前知道分類法的模板載入順序也是十分必要的。以下說明假設自定義分類法是 people 這個名字:
- 分類法分類頁首先被考慮的是 taxonomy-{taxonomy}-{term}.php 別名模板 (如分類別名 teacher 對應的檔名就是 taxonomy-people-teacher.php )
- 如果沒有別名模板,則載入該分類法歸檔頁 (如 taxonomy-people.php)
- 如果分類法歸檔頁模板也沒有則載入 archive.php 通用歸檔模板
- 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板
自定義文章型別
除了自定義分類法,有時候我們也需要自定義文章型別
- 自定義文章型別歸檔頁首先被考慮的是 archive-{post_type}.php 別名模板 (如文章型別是 product 那麼對應的檔名就是 archive-product.php)
- 如果沒有別名模板則載入 archive.php 通用歸檔模板
- 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板
作者歸檔頁
- 首先被考慮的是 author-{nicename}.php 別名模板 (如作者使用者名稱是 steven 那麼對應的檔名就是 author-steven.php)
- 如果沒有別名模板則載入 author-{id}.php ID 模板 (如作者 ID 是 1 對應的檔名就是 author-1.php)
- 如果 ID 模板沒有則載入 author.php 通用作者模板
- 如果通用作者模板也沒有則載入 archive.php 通用歸檔模板
- 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板
日期歸檔頁
- 首先被考慮的是 date.php 日期歸檔模板
- 如果日期歸檔模板沒有則載入 archive.php 通用歸檔模板
- 如果連 archive.php 通用歸檔模板都沒有則載入 index.php 模板
搜尋結果頁
- 首先被考慮的是 search.php 搜尋結果模板
- 如果沒有搜尋結果模板則載入 index.php 模板
附件頁
- 首先會按 MIME 型別載入模板 (如 image.php, video.php, application.php,而 text/plain 型別則按順序嘗試載入 text.php, plain.php, text_plain.php 這三個檔案。
- 如果沒有對應的 MIME 型別模板則 attachment.php 附件模板 (如沒有 attachment.php 則載入 single-attachment.php)
- 如果沒有附件模板則載入 single.php 文章頁模板
- 如果連 single.php 文章頁模板都沒有則載入 index.php 模板