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