頁面模板是可以應用于特定頁面或一組頁面的特定類型的模板文件。
>[warning] 注意:自WordPress 4.7頁面模板支持所有帖子類型。 有關如何將頁面模板設置為特定帖子類型的詳細信息,請參閱下面的示例。
由于頁面模板是特定類型的模板文件,因此頁面模板的一些區別特征如下:
- 頁面模板用于更改頁面的外觀和感覺。
- 頁面模板可以應用于單個頁面,頁面部分或一類頁面。
- 頁面模板通常具有高度的特異性,針對單個頁面或一組頁面。 例如,名為page-about.php的頁面模板比模板文件page.php或index.php更具體,因為它只會影響具有“about”的頁面。
- 如果頁面模板具有模板名稱,則編輯頁面的WordPress用戶可以控制將用于渲染頁面的模板。
## 用戶頁面模板
頁面模板在網頁上顯示您網站的動態內容,例如帖子,新聞更新,日歷活動,媒體文件等。您可以決定您希望您的主頁以特定的方式查看,這與您網站的其他部分完全不同 。 或者,您可能希望顯示鏈接到頁面一部分上的帖子的精選圖片,還有其他地方的最新帖子列表,并使用自定義導航。 您可以使用頁面模板來實現這些功能。
本節介紹如何構建可由用戶通過其管理屏幕選擇的頁面模板。
例如,您可以構建頁面模板:
- full-width, 一列
- two-column 右邊是一個側邊欄
- two-column 左側有一個側邊欄
- three-column 三列
## 模板層次結構中的頁面模板
當某人瀏覽您的網站時,WordPress將選擇用于呈現該頁面的模板。正如我們之前在模板層次結構中學到的,WordPress按以下順序查找模板文件:
- 頁面模板 - 如果頁面具有分配的自定義模板,則WordPress會查找該文件,如果找到,則使用它。
- page- {slug} .php - 如果沒有分配自定義模板,WordPress將查找并使用包含該頁面的塊的專門模板。
- page- {id} .php - 如果沒有找到包含頁面小插件的專門模板,WordPress會查找并使用以該頁面的ID命名的專用模板。
- page.php - 如果沒有找到包含頁面ID的專用模板,WordPress會查找并使用主題的默認頁面模板。
- singular.php - 如果沒有找到page.php,WordPress將查找并使用用于單個帖子的主題模板,不考慮帖子類型。
- index.php - 如果沒有指定或找到特定的頁面模板,WordPress將默認使用主題的索引文件來呈現頁面。
>[info] 警告:還有一個名為paged.php的WordPress定義的模板。 它不用于頁面類型,而是用于顯示多個存檔頁面。
## 頁面模板用途和用戶控制
如果您計劃為主題制作自定義頁面模板,則應在繼續操作之前決定一些事情:
頁面模板是否用于特定頁面或任何頁面;和
您想要為模板提供哪種類型的用戶控件。
創建或編輯頁面時,用戶可以選擇具有模板名稱的每個頁面模板。可以在“頁面”>“添加新建”>“屬性”>“模板”中找到可用模板列表。因此,WordPress用戶可以選擇任何具有模板名稱的頁面模板,這可能不是您的意圖。
例如,如果您想要為“關于”頁面設置一個特定的模板,可能不適合將該頁面模板命名為“關于模板”,因為它可以在全局范圍內對所有頁面(即用戶可以將其應用于任何頁)。相反,只要用戶訪問“關于”頁面,創建單一使用模板,WordPress將使用適當的模板呈現頁面。
相反,許多主題都包括選擇頁面將有多少列的能力。這些選項中的每一個都是全球可用的頁面模板。為了讓您的WordPress用戶使用此全局選項,您將需要為每個選項創建頁面模板,并為每個選項提供一個模板名稱。
判斷一個模板是全局使用還是單一使用是通過文件的命名方式來實現的,以及是否有特定的注釋。
>[warning] 注意:有時候,模板全局可用,即使它似乎是一個單一的用例也是合適的。 當您創建發布主題時,可能很難預測用戶對其頁面的名稱。 投資組合頁面是一個很好的例子,因為并不是每個WordPress用戶都將他們的投資組合命名為相同的東西或具有相同的頁面ID,但他們可能想要使用該模板。
## 頁面模板的文件組織
如主題文件組織中所述WordPress識別子文件夾頁面模板。 因此,將全局頁面模板存儲在此文件夾中是一個好主意,以幫助保持組織。
>[info] 警報:專門的頁面模板文件(僅一次使用的文件)不能在子文件夾中,也不能在父主題文件夾中使用子主題。
## 創建全局使用的自定義頁面模板
有時你會想要一個可以在任何頁面或多個頁面全局使用的模板。 一些開發人員將使用文件名前綴對其模板進行分組,例如page_two-columns.php
>[danger] 警示:重要! 不要使用page-作為前綴,因為WordPress會將文件解釋為專門的模板,僅適用于您網站上的一個頁面。
有關不能使用的主題文件命名約定和文件名的信息,請參閱保留的[主題文件名](themes/template-files.md)。
>[warning] 提示:創建新頁面模板的快速,安全的方法是創建一個page.php的副本,并為新文件提供不同的文件名。 這樣,您可以從其他頁面的HTML結構開始,您可以根據需要編輯新文件。
要創建一個全局模板,請在文件頂部寫入一個打開的PHP注釋,該注釋指出模板的名稱。
```
<?php /* Template Name: Example Template */ ?>
```
選擇一個名稱來描述模板在編輯頁面時WordPress用戶可以看到的名稱。 例如,您可以命名您的模板主頁,博客或投資組合。
來自TwentyFourteen主題的此示例創建一個稱為“全寬頁面”的頁面模板:
```
<?php
/**
* Template Name: Full Width Page
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
```
basics-page-templates-03當您將文件上傳到主題文件夾(例如頁面模板)時,請轉到管理信息中心的“頁面”>“編輯”屏幕。
在右側的屬性下,您將看到模板。 用戶可以訪問全局頁面模板。
>[warning] 提示:選擇列表的最大寬度為250px,因此更長的名稱可能會被切斷。
## 為一個特定頁面創建自定義頁面模板
如“模板層次”頁面中所述,您可以為特定頁面創建模板。 要創建一個特定頁面的模板,請復制您現有的page.php文件,并用您的頁面的插槽或ID重命名:
- page-{slug} .php
- page-{ID} .php
>[warning] 例如:您的“關于”頁面有“about”和ID為6.如果您的活動主題的文件夾有一個名為page-about.php或page-6.php的文件,則WordPress將自動查找并使用該文件 呈現關于頁面。
要使用,專業頁面模板必須位于主題的文件夾(即/wp-content/themes/my-theme-name/)中。
## 為特定的帖子類型創建頁面模板
默認情況下,自定義頁面模板將可用于“頁面”帖子類型。
要為特定的帖子類型創建頁面模板,請在模板名稱下面添加一個需要模板支持的帖子類型的一行。
示例:
```
<?php
/*
Template Name: Full-width layout
Template Post Type: post, page, event
*/
// Page code here...
```
>[info] 警報:只有從WordPress 4.7才支持將頁面模板添加到“page”以外的帖子類型的功能
當一個帖子類型至少存在一個模板時,“Post Attributes”元框將顯示在后端,而不需要為“page-attributes”或其他任何東西添加post類型的支持。 “Post Attributes”標簽可以在注冊一個帖子類型時使用“attributes”標簽定制每個帖子類型。
向后兼容性:
假設您想公開發布支持帖子類型模板的主題。 4.7之前的WordPress版本將忽略模板帖子類型標題,并在頁面模板列表中顯示模板,即使它僅適用于常規帖子。 為了防止這種情況,您可以掛接到theme_page_templates過濾器中以將其從列表中排除。 以下是一個例子:
```
/**
* Hides the custom post template for pages on WordPress 4.6 and older
*
* @param array $post_templates Array of page templates. Keys are filenames, values are translated names.
* @return array Filtered array of page templates.
*/
function makewp_exclude_page_templates( $post_templates ) {
if ( version_compare( $GLOBALS['wp_version'], '4.7', '<' ) ) {
unset( $post_templates['templates/my-full-width-post-template.php'] );
}
return $post_templates;
}
add_filter( 'theme_page_templates', 'makewp_exclude_page_templates' );
```
這樣,您可以在WordPress 4.7及更高版本中支持自定義帖子類型模板,同時保持完全向后兼容性。
>[warning]請注意,theme_page_templates實際上是一個動態主題_{$ post_type}_templates過濾器。 掛鉤名稱的動態部分$post_type是指模板支持的帖子類型。 例如。 您可以鉤入theme_product_templates來過濾產品職位類型的模板列表。
## 在頁面模板中使用條件標簽
您可以使用主題的page.php文件中的條件標簽來更小的頁面特定更改。 例如,下面的示例代碼將加載您的首頁的文件header-home.php,但為“關于”頁面加載另一個文件(header-about.php),然后對所有其他頁面應用默認的header.php。
```
if ( is_front_page() ) :
get_header( 'home' );
elseif ( is_page( 'About' ) ) :
get_header( 'about' );
else:
get_header();
endif;
```
您可以在此處了解有關[條件標簽](themes/conditional-tags.md)的更多信息。
## 識別頁面模板
如果您的模板使用了body_class()函數,則WordPress將在文本類標題(頁面),頁面ID(page-id- {ID})以及所使用的頁面模板的body標簽中打印類。 對于默認的page.php,生成的類名稱為page-template-default:
```
<body class="page page-id-6 page-template-default">
```
>[warning] 注意:一個專門的模板(page- {slug} .php或page- {ID} .php)也獲取了page-template-default類而不是其自己的body類。
當使用自定義頁面模板時,將打印類頁面模板以及命名特定模板的類。 例如,如果您的自定義頁面模板文件命名如下:
```
<?php
/* Template Name: My Custom Page */
?>
```
然后渲染HTML生成將如下所示:
```
<body class="page page-id-6 page-template page-template-my-custom-page-php">
```
>[warning] 注意應用于body標簽的page-template-my-custom-page-php類。
## 頁面模板方法
這些內置的WordPress功能和方法可以幫助您使用頁面模板:
- get_page_template() 返回用于呈現頁面的頁面模板的路徑。
- wp_get_theme()->get_page_templates() 返回可用于當前活動主題的所有自定義頁面模板(get_page_templates()是WP_Theme類的一種方法)。
- is_page_template() 根據是否使用自定義頁面模板來呈現頁面,返回true或false。
- get_page_template_slug() 返回自定義字段_wp_page_template的值(當該值為空時為空或“默認值”)如果頁面已分配了一個自定義模板,該模板的文件名將被存儲為名為“_wp_page_template”的自定義字段的值 wp_postmeta數據庫表)。 (自定義字段以下劃線開頭,不會顯示在編輯屏幕的自定義字段模塊中。)
- 簡介
- 主題開發
- WordPress許可證
- 什么是主題
- 開發環境
- 主題開發示例
- 主題基礎
- 模板文件
- 主樣式表(style.css)
- 文章類型
- 規劃主題文件
- 模板層級
- 模板標簽
- 循環
- 主題函數
- 連接主題文件和目錄
- 使用CSS和JavaScript
- 條件標簽
- 類別,標簽和自定義分類
- 模板文件
- 內容模板文件
- 頁面模板文件
- 附件模板文件
- 自定義內容類型
- 部分和其他模板文件
- 評論模板
- 分類模板
- 404頁面
- 主題功能
- 核心支持的功能
- 管理菜單
- 自定義Headers
- 自定義Logo
- 文章格式
- 置頂文章
- Sidebars
- Widgets
- 導航菜單
- 分頁
- 媒體
- Audio
- Images
- Galleries
- Video
- 精選圖片和縮略圖
- 國際化
- 本地化
- 輔助功能
- 主題選項 – 自定義API
- 定制對象
- 改進用戶體驗的工具
- 定制JavaScript API
- JavaScript / Underscore.js渲染的自定義控件
- 高級用法
- 主題安全
- 數據消毒/逃避
- 數據驗證
- 使用隨機數
- 常見漏洞
- 高級主題
- 子主題
- UI最佳實踐
- JavaScript最佳做法
- 主題單元測試
- 驗證你的主題
- Plugin API Hooks
- 發布你的主題
- 所需的主題文件
- 測試
- 主題評論指南
- 寫文檔
- 提交你的主題到WordPress.org
- 參考文獻
- 模板標簽列表
- 條件標簽列表
- 編碼標準
- HTML編碼標準
- CSS編碼標準
- JavaScript編碼標準
- PHP編碼標準
- 插件開發
- 插件開發簡介
- 什么是插件
- 插件基礎
- 頭部要求
- 包括軟件許可證
- 啟用 / 停用 Hooks
- 卸載方法
- 最佳做法
- 插件安全
- 檢查用戶功能
- 數據驗證
- 保護輸入
- 保護輸出
- 隨機數
- Hooks
- Actions
- Filters
- 自定義Hooks
- 高級主題
- 管理菜單
- 頂級菜單
- 子菜單
- 短代碼
- 基本短碼
- 封閉短碼
- 帶參數的短代碼
- TinyMCE增強型短碼
- 設置
- 設置API
- 使用設置API
- 選項API
- 自定義設置頁面
- 元數據
- 管理帖子元數據
- 自定義元數據
- 渲染元數據
- 自定義文章類型
- 注冊自定義文章類型
- 使用自定義文章類型
- 分類
- 使用自定義分類
- 在WP 4.2+中使用“split術語”
- 用戶
- 創建和管理用戶
- 使用用戶元數據
- 角色和功能
- HTTP API
- JavaScript
- jQuery
- Ajax
- 服務器端PHP和入隊
- Heartbeat API
- 概要
- 計劃任務
- 了解WP-Cron計劃
- 安排WP-Cron 事件
- 將WP-Cron掛接到系統任務計劃程序中
- WP-Cron簡單測試
- 國際化
- 本地化
- 如何國際化您的插件
- 國際化安全
- WordPress.org
- 詳細插件指南
- 規劃您的插件
- 如何使用Subversion
- 插件開發者常見問題
- 開發工具
- Debug Bar 和附加組件
- 輔助插件
- REST API手冊
- 資源
- 文章
- 文章修訂
- 文章類型
- 文章狀態
- 類別
- 標簽
- 頁面
- 評論
- 分類
- 媒體
- 用戶
- 設置
- 使用REST API
- 全局參數
- 分頁
- 鏈接和嵌入
- 發現
- 認證
- 經常問的問題
- 骨干JavaScript客戶端
- 客戶端庫
- 擴展REST API
- 添加自定義端點
- 自定義內容類型
- 修改回應
- 模式
- 詞匯表
- 路由和端點
- 控制器類