找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 650|回復: 1
打印 上一主題 下一主題

[教程] WordPress的模板層次

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2015-2-1 15:25:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

逛了這許久,何不進去瞧瞧?

您需要 登錄 才可以下載或查看,沒有帳號?立即注冊

x

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 模板

模板層次圖

上面用文字詳細講述了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() 則是判斷文章頁的條件標簽,等等。


微網絡高中生

微幣
1774

熱心會員勛章帥哥勛章雙子座十二生肖-丑牛灌水王勛章幫助達人勛章

沙發
發表于 2015-2-1 17:09:37 | 只看該作者
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則