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' );