FirstLayout

Cocoonのフィルターフックを使いclassを追加

body タグに class を追加

関数
apply_filters( 'body_class_additional', $classes )
記載ファイル
lib / additional-classes.php

body_class_additional は、<body> タグに class を追加するフィルターフックです。

また、既存のすべての class の書き換えも可能。このフィルターフックさえ覚えていれば、class の追加に困りません。

基本的な使い方は、下記のとおりです。

add_filter( 'body_class_additional', function( $classes ) {
  $classes[] = '追加したいclass名';

  return $classes;
});

body_class_additional を使った例を 3 つあげます。

親カテゴリーの id を class に追加

カテゴリーを階層にしているサイトは多いでしょう。

けれど、Cocoon のデフォルトでは、親カテゴリーの id は投稿ページの class に出力されません。

親カテゴリーの id が投稿ページの class に必要であれば、このようなコードを子テーマの functions.php に追加します。

add_filter( 'body_class_additional', function( $classes ) {
  if ( is_single() ) {
    $cat = get_the_category();
    $parent_id = $cat[0]->parent;

    if ( ! empty( $parent_id ) ) {
      $classes[]  = 'parent-cat-' . $parent_id;
    }
  }

  return $classes;
});

これで、parent-cat-○○ との class が <body> タグに追加されます(○○は親カテゴリーの id)。

id ではなく slug が必要であれば、このように書きます。

add_filter( 'body_class_additional', function( $classes ) {
  if ( is_single() ) {
    $cat = get_the_category();
    $parent_id = $cat[0]->parent;

    if ( ! empty( $parent_id ) ) {
      $cat_parent = get_term( $parent_id, 'category' );
      $classes[]  = $cat_parent->slug;
    }
  }

  return $classes;
});

これで親カテゴリーのスラッグが、<body> タグの class に追加されます。

祖先カテゴリーの id を class に追加

先程のコードでは、親のさらに親のカテゴリーの id は出力されません。

投稿ページに親カテゴリーを含めた祖先カテゴリーの id が必要であれば、このようなコードを子テーマの functions.php に追加します。

add_filter( 'body_class_additional', function( $classes ) {
  if ( is_single() ) {
    $cat = get_the_category();
    $ancestors = get_ancestors( $cat[0]->term_id, 'category' );

    if ( is_array( $ancestors ) ) {
      foreach ( $ancestors as $ancestor ) {
        $classes[] = 'ancestor-cat-' . $ancestor;
      }
    }
  }

  return $classes;
});

これで祖先カテゴリーの数だけ、ancestor-cat-○○ という class が追加されます(○○は祖先カテゴリーの id)。

あるカテゴリーの階層に属する投稿ページに class を追加

あるカテゴリーの階層に属した投稿ページに、任意の class を追加する方法もあります。

id が 10 のカテゴリー、ならびに id が 10 のカテゴリーの子孫カテゴリーに属する全ての投稿ページに、common-cat という class を追加してみます。

add_filter( 'body_class_additional', function( $classes ) {
  if ( is_single() && ( in_category( 10 ) || post_is_in_descendant_category( 10 ) ) ) {
    $classes[] = 'common-cat';
  }

  return $classes;
});

// この関数は下記リンクの Codex よりコピペしました
function post_is_in_descendant_category( $cats, $_post = null ) {
  foreach ( (array) $cats as $cat ) {
    $descendants = get_term_children( (int) $cat, 'category' );

    if ( $descendants && in_category( $descendants, $_post ) )
      return true;
  }

  return false;
}

参考 関数リファレンス/in category – WordPress Codex 日本語版

祖先カテゴリーの id を class に追加する例と似ていますが、柔軟性はこちらが優れています。

その他の場所に class を追加するフィルターフック

<body> タグに class を追加できれば、ほとんどのケースで困りません。

しかし、その他の要素に class を追加したい時もあります。

Cocoon には、様々な場所に class を追加するためのフィルターフックが用意されています。それらのフィルターフックを列挙しました。

これより下のフィルターフックの基本的な使い方は、下記のとおりです。

add_filter( 'フィルターフック', function( $classes ) {

  // 追加したいclass名の前に半角スペースが必要
  $classes .= ' 追加したいclass名';

  return $classes;
});

最初に紹介する get_additional_main_classes を使い、class に example を追加する場合はこんな感じです。

add_filter( 'get_additional_main_classes', function( $classes ) {
  $classes .= ' example';

  return $classes;
});

main タグに class を追加

関数
apply_filters( 'get_additional_main_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_main_classes は、<main> タグに class を追加するフィルターフックです。

デフォルトでは、class に main が付いています。

本文部分に class を追加

関数
apply_filters( 'get_additional_entry_content_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_entry_content_classes は、<main> タグ内の本文部分の <div> タグに class を追加するフィルターフックです。

デフォルトでは、class に entry-content が付いています。

[C] 新着記事に class を追加

関数
apply_filters( 'get_additional_widget_entriy_cards_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_widget_entriy_cards_classes は、ウィジェットの [C] 新着記事に class を追加するフィルターフックです。

追加される位置は、デフォルトで class に new-entry-cardswidget-entry-cards などがある <div> タグ。

[C] 人気記事に class を追加

関数
apply_filters( 'get_additional_popular_entriy_cards_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_popular_entriy_cards_classes は、ウィジェットの [C] 人気記事に class を追加するフィルターフックです。

追加される位置は、デフォルトで class に popular-entry-cardswidget-entry-cards などがある <div> タグ。

シェアボタンに class を追加

関数
apply_filters( 'get_additional_sns_share_button_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_sns_share_button_classes は、投稿・固定ページのシェアボタンに class を追加するフィルターフックです。

追加される位置は、デフォルトで class に sns-share などがある <div> タグ。

フォローボタンに class を追加

関数
apply_filters( 'get_additional_sns_follow_button_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_sns_follow_button_classes は、投稿・固定ページのフォローボタンに class を追加するフィルターフックです。

追加される位置は、デフォルトで class に sns-follow などがある <div> タグ。

内部ブログカードに class を追加

関数
apply_filters( 'get_additional_internal_blogcard_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_internal_blogcard_classes は、内部ブログカードに class を追加するフィルターフックです。

追加される位置は、デフォルトで class に blogcardinternal-blogcard がある <div> タグ。

外部ブログカードに class を追加

関数
apply_filters( 'get_additional_external_blogcard_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_external_blogcard_classes は、外部ブログカードに class を追加するフィルターフックです。

追加される位置は、デフォルトで class に blogcardexternal-blogcard がある <div> タグ。

header タグに class を追加

関数
apply_filters( 'get_additional_header_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_header_classes は、サイトタイトル部分の <header> タグに class を追加するフィルターフックです。

デフォルトでは、class にheader が付いています。

サイト全体コンテナに class を追加

関数
apply_filters( 'get_additional_container_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_container_classes は、<body> タグ直下の container の id と class がある <div> タグに、class を追加するフィルターフックです。

ヘッダーコンテナに class を追加

関数
apply_filters( 'get_additional_header_container_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_header_container_classes は、header-container の id がある <div> タグの直下の <div> タグに、class を追加するフィルターフックです。

デフォルトでは、class に header-container-in が付いています。

フッターボトムに class を追加

関数
apply_filters( 'get_additional_footer_bottom_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_footer_bottom_classes は、サイト全体の <footer> タグ(footer の id がある)内の <div> タグに、class を追加するフィルターフックです。

デフォルトでは、class に footer-bottom が付いています。

関連記事に class を追加

関数
apply_filters( 'get_additional_related_entries_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_related_entries_classes は、関連記事に class を追加するフィルターフックです。

デフォルトでは、class に related-entries が付いています。

ページ送りナビに class を追加

関数
apply_filters( 'get_additional_post_navi_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_post_navi_classes は、投稿ページのページ送りナビに class を追加するフィルターフックです。

デフォルトでは、class に pager-post-navi が付いています。

コメントエリアに class を追加

関数
apply_filters( 'get_additional_comment_area_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_comment_area_classes は、コメントエリアに class を追加するフィルターフックです。

デフォルトでは、class に comment-area が付いています。

投稿ページのパンくずリストに class を追加

関数
apply_filters( 'get_additional_single_breadcrumbs_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_single_breadcrumbs_classes は、投稿ページのパンくずリストに class を追加するフィルターフックです。

デフォルトでは、class に breadcrumb などが付いています。

固定ページのパンくずリストに class を追加

関数
apply_filters( 'get_additional_page_breadcrumbs_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_page_breadcrumbs_classes は、固定ページのパンくずリストに class を追加するフィルターフックです。

デフォルトでは、class に breadcrumb などが付いています。

インデックスリストに class を追加

関数
apply_filters( 'get_additional_entry_card_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_entry_card_classes は、インデックスリストに class を追加するフィルターフックです。

デフォルトでは、class に list が付いています。

目次に class を追加

関数
apply_filters( 'get_additional_toc_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_toc_classes は、目次に class を追加するフィルターフックです。

追加される位置は、デフォルトで class に toc がある <div> タグ。

アピールエリアに class を追加

関数
apply_filters( 'get_additional_appeal_area_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_appeal_area_classes は、アピールエリアに class を追加するフィルターフックです。

デフォルトでは、class に appeal が付いています。

カルーセルに class を追加

関数
apply_filters( 'get_additional_carousel_area_classes', $classes )
記載ファイル
lib / additional-classes.php

get_additional_carousel_area_classes は、カルーセルに class を追加するフィルターフックです。

デフォルトでは、class に carousel が付いています。

メニュー 閉じる 検索 記事を読む Facebook Twitter はてなブックマーク Pocket LINE ダウンロード 全ての記事 Web制作 便利ツール