WordPress custom single page template

方法一、模板檔名規則

WordPress 提供利用檔名命名的方式設定 post type 內容頁的自訂模板:

single-{post-type}.php
archive-{post-type}.php
search.php
index.php

上方的檔名順序,代表WordPress查找模板的順序,大括號中代表自定義文章類型( custom post type ) 的slug,如果自定義文章類型的slug為 news,自定義文章類型內容頁主題依序為:

single-news.php
archive-news.php
search.php
index.php

若 single-news.php 找不到,就查找 archive-news.php 以這兩種檔名規則為主,如果都找不到才會去找 search.php 、 index.php

基本上也建議用前兩種規則,雖然程式會依序向下查找,但是 search.php 、 index.php 通常有其他作用,並且避免主題混亂,最好從檔名就知道該檔案是哪一個 自定義文章類型 的模板

參考:Custom Post Type Template Files


方法二、代碼方式

其實透過檔案命名規則已經很方便了,但在特殊的情況,還是會需要透過代碼來定義或修改當前文章內容頁的模板,以下介紹另一種方法,透過 WordPress 主題的 API ,用代碼來進行判斷,利用 single_template 這個 Hook 來判斷文章,回傳給 WordPress 指定主題檔案位置。

single_template 這個 Hook 在取得內容頁模板前調用

把下方代碼,置於主題目錄中的 function.php 中

/**
 * custom post type template
 *
 * @author VECTOR Ann <ann@vector.cool>
 * @link https://vector.cool
 * 
 * @param string $single_template
 * @return string
 */
function get_custom_post_type_template($single_template) {
	global $post;
	if ($post->post_type === 'custom_post_type_slug') {
		 $single_template = dirname( __FILE__ ) . '/post-type-template.php';
	}
	return $single_template;
}
add_filter( 'single_template', 'get_custom_post_type_template' );

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料