WordPress 模板的定義非常方便,但是在定製模板之前,我們有必要知道 WordPress 的模板層次,瞭解 WordPress 是如何加載模板文件的,這將有利於開發模板時合理利用資源及提高工作效率。

萬能的 index.php

通過“WordPress 主題構成” 這篇文章,我們已知道一個最簡單的 WordPress 主題只需要 style.css 和 index.php 文件即可。這代表着 index.php 可以是任何一個頁面的模板,無論是首頁,還是文章頁,或是分類頁,再或者是搜索結果頁面,它都能完美勝任。

也就是説,當對應的模板不存在時, index.php 將是 WordPress 最後的底牌。

模板加載順序

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

首頁

  1. 首先 WordPress 會先檢查是否有靜態首頁,如果有靜態首頁,就會加載這個頁面內容並通過 front-page.php 模板文件展示,如果沒有這個模板文件,就會通過頁面模板展示
  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 模板

標籤頁

  1. 標籤頁模板加載順序和分類頁一樣,只不過前綴不過 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 模板