【WordPress】 bodyにカテゴリースラッグのクラスを追加する方法(single.php)

wordpress

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

wordpress
スポンサーリンク
Web Parts Box
タイトルとURLをコピーしました