bodyタグに<?php body_class();?>でページ毎のクラスを付けると、cssで装飾を変えたい場合などにとても助かりますよね。
これをカテゴリー毎に装飾を変えたい場合…archive.phpだとカテゴリーごとのクラスが入ってくれるんですが、single.phpには入らない。
投稿データ(記事)がすでにある場合は、get_the_categoryやget_the_termsを使用して、ファイル内のどこかでクラスとして出力させれば済むのですが、投稿データが一件もまだない場合は、ファイル内ではカテゴリー情報を出してくれない。。。
こういう場合にfunctions.phpに記載しbodyに出力するようにすると便利です。
※投稿ページに出力させる場合
//bodyにカテゴリ固有のクラスを追加(投稿ページ)
function my_body_classes($classes) {
global $wp_query;
if (is_single() ) {
global $post;
foreach((get_the_category($post->ID)) as $category) {
$classes[] = 'category-' . $category->slug;
}
}
return array_unique($classes);
};
add_filter('body_class','my_body_classes');
※カスタム投稿の場合
//bodyにカテゴリ固有のクラスを追加(カスタム投稿)
function add_taxonomy_class($classes) {
if (is_singular() ) {
global $post;
$taxonomy_terms = get_the_terms($post->ID,'カスタムタクソノミー名');
if($taxonomy_terms){
foreach($taxonomy_terms as $taxonomy_term){
$classes[] = 'term-'.$taxonomy_term->slug;
}
}
}
return $classes;
};
add_filter('body_class','add_taxonomy_class');