WordPress主題模板層級
時間:2023-06-11 20:48:02 | 來源:網(wǎng)站運營
時間:2023-06-11 20:48:02 來源:網(wǎng)站運營
WordPress主題模板層級:如所討論的,模板文件是模塊化的,可重復(fù)使用的文件,用于在WordPress站點上生成網(wǎng)頁。 一些模板文件(如頁眉和頁腳模板)用于所有網(wǎng)站的頁面,而其他模板文件僅在特定條件下使用。
本文解釋WordPress如何確定在單個頁面上使用哪個模板文件。 如果要自定義現(xiàn)有的WordPress主題,它將幫助您確定需要編輯的模板文件。
提示:您還可以使用條件標簽來控制在特定頁面上加載哪些模板。
模板文件層次結(jié)構(gòu)
概述
WordPress使用查詢字符串來決定哪個模板或一組模板應(yīng)用于顯示頁面。查詢字符串是指向您網(wǎng)站每個部分的鏈接中的信息。它來自初始問號,可能包含多個由&符號分隔的參數(shù)。
簡單地說,WordPress通過模板層次結(jié)構(gòu)搜索,直到找到匹配的模板文件。要確定使用哪個模板文件,WordPress:
- 將每個查詢字符串匹配到查詢類型以確定正在請求哪個頁面(例如,搜索頁面,類別頁面等);
- 按照模板層次結(jié)構(gòu)確定的順序選擇模板;
- 在當前主題的目錄中查找具有特定名稱的模板文件,并使用層次結(jié)構(gòu)指定的第一個匹配的模板文件。
- 除了基本的index.php模板文件外,您可以選擇是否要實現(xiàn)特定的模板文件。
如果WordPress找不到具有匹配名稱的模板文件,它將跳到層次結(jié)構(gòu)中的下一個文件。如果WordPress找不到任何匹配的模板文件,將使用主題的index.php文件。
示例
如果您的博客位于http://example.com/blog/ ,訪問者點擊鏈接到類別頁面(例如http://example.com/blog/category/your-cat/) ,WordPress會查找模板 在當前主題的目錄中匹配類別的ID以生成正確的頁面。 更具體地說,WordPress遵循以下過程:
- 在當前主題的目錄中查找與該類別的插件匹配的模板文件。 如果類別slug是“unicorns”,則WordPress會查找名為category-unicorns.php的模板文件。
- 如果category-unicorns.php缺少且類別的ID為4,則WordPress將查找名為category-4.php的模板文件。
- 如果缺少類別4.php,WordPress將尋找一個通用類別模板文件category.php。
- 如果category.php不存在,WordPress將尋找一個通用歸檔模板archive.php。
- 如果archive.php也丟失,WordPress將回到主題模板文件index.php。
視覺概述
下圖顯示了哪些模板文件被調(diào)用以基于WordPress模板層次結(jié)構(gòu)生成WordPress頁面。
您也可以與此圖交互。
模板層次詳細
雖然模板層次結(jié)構(gòu)更容易被理解為圖表,但以下部分描述了WordPress為多種查詢類型調(diào)用模板文件的順序。
主頁顯示
默認情況下,WordPress設(shè)置您的網(wǎng)站的主頁以顯示最新的博文。 這個頁面被稱為博客帖子索引。 您也可以將您的博客帖子設(shè)置為在單獨的靜態(tài)頁面上顯示。 模板文件home.php用于呈現(xiàn)博客帖子索引,無論是用作首頁還是單獨的靜態(tài)頁面。 如果home.php不存在,WordPress將使用index.php。
注意:如果front-page.php存在,它將覆蓋home.php模板。
首頁
front-page.php模板文件用于呈現(xiàn)您網(wǎng)站的首頁,首頁是否顯示博客帖子索引(如上所述)或靜態(tài)頁面。 首頁模板優(yōu)先于博客帖子索引(home.php)模板。 如果front-page.php文件不存在,WordPress將根據(jù)設(shè)置→閱讀中的設(shè)置使用home.php或page.php文件。 如果這兩個文件都不存在,它將使用index.php文件。
- front-page.php - 用于首頁顯示設(shè)置→閱讀部分中的“您的最新帖子”或“靜態(tài)頁面”。
- home.php - 如果WordPress找不到front-page.php和“你的最新帖子”設(shè)置在首頁顯示部分,它將尋找home.php。 此外,當在首頁顯示部分中設(shè)置帖子頁面時,WordPress將查找此文件。
- page.php - 在首頁顯示部分設(shè)置“首頁”時。
- index.php - 在首頁顯示部分設(shè)置“您的最新帖子”,但home.php不存在或者當首頁設(shè)置但page.php不存在時。
正如你所看到的,WordPress所采用的路徑有很多規(guī)則。 使用上面的圖表是確定WordPress將顯示的最佳方式。
單頁內(nèi)容
單頁內(nèi)容模板文件用于呈現(xiàn)單頁內(nèi)容。 WordPress使用以下路徑:
- single-{post-type} - {slug} .php - (從4.4開始)首先,WordPress尋找特定內(nèi)容的模板。 例如,如果內(nèi)容類型是產(chǎn)品,并且post slug是dmc-12,則WordPress會查找單個產(chǎn)品dmc-12.php。
- single- {post-type} .php - 如果帖子類型是產(chǎn)品,WordPress將尋找單一product.php。
- single.php - WordPress然后回到single.php。
- singular.php - 然后它回到singular.php。
- index.php - 最后,如上所述,WordPress最終會回到index.php。
單頁
用于呈現(xiàn)靜態(tài)頁面的模板文件(頁面后置類型)。 請注意,與其他后期類型不同,頁面特別適用于WordPress,并使用以下修補程序:
自定義模板文件 - 分配給頁面的頁面模板。 請參閱get_page_templates()。
- page- {slug} .php - 如果該頁面是最新消息,WordPress將會使用page-recent-news.php。
- page- {id} .php - 如果頁面ID為6,WordPress將使用page-6.php。
- page.php
- singular.php
- index.php
類別
渲染類別歸檔索引頁在WordPress中使用以下路徑:
- category- {slug} .php - 如果類別的lug lug是新聞,WordPress將會查找category-news.php。
- category- {id} .php - 如果類別的ID為6,WordPress將尋找類別為6.php。
- category.php
- archive.php
- index.php
標簽
要顯示標簽歸檔索引頁面,WordPress使用以下路徑:
- tag- {slug} .php - 如果標簽的插件是某個標簽,WordPress將會查找tag-sometag.php。
- tag- {id} .php - 如果標簽的ID為6,WordPress將尋找標簽6.php。
- tag.php
- archive.php
- index.php
自定義分類
自定義分類使用稍微不同的模板文件路徑:
- taxonomy-{taxonomy}-{term}.php – 如果分類是某種類型,而分類學術(shù)語是某種語言,則WordPress將尋找分類法。 在發(fā)布格式的情況下,分類是“post_format”,術(shù)語是“post-format- {format}”。 即鏈接后期格式的taxonomy-post_format-post-format-link.php。
- taxonomy-{taxonomy}.php – 如果分類是多數(shù),WordPress會尋找分類法 - sometax.php。
- taxonomy.php
- archive.php
- index.php
自定義內(nèi)容類型
自定義帖子類型使用以下路徑呈現(xiàn)相應(yīng)的歸檔索引頁面。
- archive- {post_type} .php - 如果帖子類型是產(chǎn)品,WordPress將尋找archive-product.php。
- archive.php
- index.php
(要渲染單個帖子類型模板,請參閱上面的單個帖子顯示部分。)
作者顯示
基于上述示例,渲染作者存檔索引頁面是相當明確的:
- author- {nicename} .php - 如果作者的漂亮的名字是啞光,WordPress將尋找author-matt.php。
- author- {id} .php - 如果作者的ID為6,WordPress將尋找author-6.php。
- author.php
- archive.php
- index.php
日期
基于日期的歸檔索引頁面按照您預(yù)期的方式呈現(xiàn):
- date.php
- archive.php
- index.php
搜索結(jié)果
搜索結(jié)果遵循與其他模板類型相同的模式:
404(找不到)
同樣,404模板文件按以下順序調(diào)用:
附件
渲染附件頁面(附件類型)需要遵循以下路徑:
- MIME_type.php - 它可以是任何MIME類型(例如:image.php,video.php,application.php)。 對于text / plain,使用以下路徑(順序):
- text_plain.php
- plain.php
- text.php
- attachment.php
- single-attachment.php
- single.php
- index.php
嵌入模板
嵌入模板文件用于渲染正在嵌入的帖子。 自4.5以來,WordPress使用以下路徑:
- embed- {post-type} - {post_format} .php - 首先,WordPress尋找特定帖子的模板。 例如,如果其帖子類型是產(chǎn)品,并且具有音頻格式,則WordPress將尋找embed-product-audio.php。
- embed- {post-type} .php - 如果帖子類型是汽車,WordPress會尋找embed-car.php。
- embed.php - WordPress然后回到embed.php。
- 最后,WordPress最終還是回到wp-includes/theme-compat/embed.php
過濾層次結(jié)構(gòu)
WordPress模板系統(tǒng)允許您過濾層次結(jié)構(gòu)。 這意味著您可以在層次結(jié)構(gòu)的特定點插入和更改東西。 過濾器(位于get_query_template()函數(shù)中)使用此過濾器名稱:“{$ type} _template”其中$ type是沒有.php擴展名的層次結(jié)構(gòu)中的文件名。
以下是過濾器層次結(jié)構(gòu)中所有模板類型的完整列表:
- 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
- embed_template
示例
例如,讓我們采用默認的作者層次結(jié)構(gòu):
- author-{nicename}.php
- author-{id}.php
- author.php
要在author.php之前添加author- {role} .php,我們可以使用'author_template'模板類型來操作實際的層次結(jié)構(gòu)。 這允許對/ author/username的請求,其中username具有編輯器的作用,使用author-editor.php(如果存在于當前主題目錄中)顯示。
function author_role_template( $templates = '' ) { $author = get_queried_object(); $role = $author->roles[0]; if ( ! is_array( $templates ) && ! empty( $templates ) ) { $templates = locate_template( array( "author-$role.php", $templates ), false ); } elseif ( empty( $templates ) ) { $templates = locate_template( "author-$role.php", false ); } else { $new_template = locate_template( array( "author-$role.php" ) ); if ( ! empty( $new_template ) ) { array_unshift( $templates, $new_template ); } } return $templates;}add_filter( 'author_template', 'author_role_template' );