WordPress 模板層次詳細介紹

    模板加載詳細教程

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

    萬能的index.php

    我們知道一個最簡單的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?模板

    標簽頁

    標簽頁模板加載順序和分類頁一樣,只不過前綴不過?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()?則是判斷文章頁的條件標簽,等等。

    原文鏈接:http://www.dmeng.net/wordpress-template-hierarchy.html

    資源

    Joe開源圖床目錄程序

    2020-12-23 20:59:49

    TGM-Plugin-Activation - 激活Wordpress主題需要的插件

    2019-11-24 12:32:07

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 国产日本亚洲一区二区三区| 日韩精品一区二区三区四区| 亚洲AV成人一区二区三区在线看 | 亚欧免费视频一区二区三区| 精品人妻AV一区二区三区| 国产激情一区二区三区 | 中文字幕AV一区二区三区| 亚洲av无码一区二区三区观看| 一区二区三区在线播放| 最新欧美精品一区二区三区| 国产一区二区不卡在线播放| 中文字幕一区二区视频| 国产观看精品一区二区三区| 久久国产三级无码一区二区| 大伊香蕉精品一区视频在线| 相泽亚洲一区中文字幕| 国产av天堂一区二区三区| 日本一区精品久久久久影院| 国产亚洲一区二区手机在线观看| 久久久综合亚洲色一区二区三区| 久久国产精品无码一区二区三区 | 亚洲一区二区三区四区在线观看| 久久精品国产一区二区三| 91精品一区二区综合在线| 国产品无码一区二区三区在线| 在线|一区二区三区四区| 一区二区手机视频| 国产在线不卡一区二区三区 | 精品成人乱色一区二区| 精品国产免费一区二区| 合区精品久久久中文字幕一区| 国产一区二区三区在线2021| 99久久精品日本一区二区免费| 免费一本色道久久一区| 丰满人妻一区二区三区视频| 亚洲AV无码一区二区三区DV| 国产精品久久无码一区二区三区网 | 国产肥熟女视频一区二区三区| 亚洲国产一区视频| 亚洲Av无码一区二区二三区| 午夜精品一区二区三区在线观看|