WordPrdss single page template by category

WordPress 主題的命名規則,沒有針對指定分類文章內容頁的命名規則

但實務上很常見,可能需依據文章分類,提供不同主題,例如:親子話題、旅行玩樂、時尚精品,每個分類都希望有不同的視覺效果或功能,目前 WordPress 主題的命名規則只提供分類聚集頁主題明明規則,但沒有分類下文章內容頁

所以我們需透過 WordPress API 代碼的方式來判斷當前文章,讓分類下的文章都套用指定模板。

文章類別 (category)

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

/**
 * single page template by category
 * 取得分類下文章內容頁模板
 *
 * @param string $single_template
 * @return string
 */
function get_single_template_by_category($single_template) {
	global $post;
	$category   = 'your-category';
	if ( in_category($category,$post->ID) ) {
		$single_template = get_stylesheet_directory() . '/single-your-category.php';
	}
	return $single_template;
}
add_filter( 'single_template', 'get_single_template_by_category' );

your-category 為欲自訂分類模板的分類名稱。
single-your-category.php 為 自訂分類模板檔案

因為一篇文章能套用多個分類,所以這要特別說明一下,上方代碼,在文章勾選的分類中,只要勾選到定義分類,就會顯示定義分類模板 single-your-category.php。

若您只需要文章勾選的的主要分類才套用定義分類模板 single-your-category.php 在判斷上做一點修改,如下方代碼:

/**
 * single page template by category
 * 取得分類下文章內容頁模板
 *
 * @param string $single_template
 * @return string
 */
function get_single_template_by_category($single_template) {
	global $post;
	$category   = 'your-category';
	$categories = get_the_category( $post->ID );
	$slug = $categories[0]->slug;
	if ( $slug === $category ) {
		$single_template = get_stylesheet_directory() . '/single-your-category.php';
	}
	return $single_template;
}
add_filter( 'single_template', 'get_single_template_by_category' );

上方代碼僅適用一般文章及一般文章分類,如果希望自訂分類法也能有相同效果,請參考下方代碼


自訂分類法 (Taxonomy)

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

以下代碼,兼容一般文章分類法及自訂義分類法

/**
 * single page template by taxonomy
 * 取得分類下文章內容頁模板
 *
 * @param string $single_template
 * @return string
 */
function get_single_template_by_taxonomy($single_template) {
	global $post;
	$category      = 'your-term';
	$Taxonomy_slug = 'category';
	if ( has_term($category,$Taxonomy_slug,$post->ID) ) {
		$single_template = get_stylesheet_directory() . '/single-your-term.php';
	}
	return $single_template;
}
add_filter( 'single_template', 'get_single_template_by_taxonomy' );

your-term 為欲自訂分類模板的分類名稱。
category 自訂義分類法名稱
single-your-term.php 為自訂分類模板檔案

和文章一般分類一樣,因為一篇文章能套用多個分類,上方代碼,在文章勾選的分類中,只要勾選到定義分類,就會顯示定義分類模板 single-your-term.php。

若您只需要文章勾選的的主要分類才套用定義分類模板 single-your-term.php 在判斷上做一點修改,如下方代碼:

/**
 * single page template by taxonomy
 * 取得分類下文章內容頁模板
 *
 * @param string $single_template
 * @return string
 */
function get_single_template_by_taxonomy($single_template) {
	global $post;
	$category      = 'your-term';
	$Taxonomy_slug = 'category';
	$categories = get_the_terms( $post->ID , $Taxonomy_slug );
	$slug = $categories[0]->slug;
	if ( $slug === $category ) {
		$single_template = get_stylesheet_directory() . '/single-your-term.php';
	}
	return $single_template;
}
add_filter( 'single_template', 'get_single_template_by_taxonomy' );

發佈留言

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

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