WordPressのbody_classに固定ページのルートのスラッグを追加する

body_classで出力されるclassに最上位のルートのページのスラッグを含むclass名が追加されるようになります。子ページ全部で同じcssを利用できるので、特定のツリーだけ配色を変更したいときなど便利にですよね。さらに、汎用化しているので固定ページだけじゃなくて、階層サポートしたのカスタム投稿タイプでも利用できます。

class名は、{投稿タイプスラッグ}-category-{ページのスラッグ}という命名規則にしてますが、このあたりはお好みで。

 $post_type . '-category-' . $post->post_name

の部分を変えてくださいな。

function add_page_root_body_class( $classes ) {
	if ( is_singular() ) {
		$post_type = get_query_var( 'post_type' );
		if ( is_page() ) {
			$post_type = 'page';
		}
		if ( $post_type && is_post_type_hierarchical( $post_type ) ) {
			global $post;
			if ( $post->ancestors ) {
				$root = $post->ancestors[count($post->ancestors) - 1];
				$root_post = get_post( $root );
				$classes[] = esc_attr( $post_type . '-category-' . $root_post->post_name );
			} else {
				$classes[] = esc_attr( $post_type . '-category-' . $post->post_name );
			}
		}
	}
	return $classes;
}
add_filter( 'body_class', 'add_page_root_body_class' );

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です