どのテンプレートが使用されているかに応じて、条件付きでボディクラスを追加します。
次のコードが機能していない理由がわかりません...
function damsonhomes_body_classes( $classes ) {
if (is_page_template('single.php')) {
$classes[] = 'sans-hero';
}
return $classes;
}
add_filter( 'body_class', 'damsonhomes_body_classes');
皆さんありがとう
is_page_template()
関数は、 Page Templates およびsingle.php
はページ固有のテンプレートではなく単なるテンプレートであるため、この場合に使用する不適切な関数です。通常は投稿用です。
おそらく代わりに使用したい関数は is_single( $optional_posttype )
で、これは投稿タイプの特異なビュー、デフォルトではpost
を探します。
if( is_single() ) {
/** ... **/
}
reallyしたい場合は、ベース名をチェックすることもできます:
global $template;
$template_slug = basename( $template );
if( 'single.php' === $template_slug ) {
/** ... **/
}
single.php
は単一の投稿用のテンプレートファイルです。通常はページには使用しないでください。
また、 get_body_class()
は現在のページテンプレートに関する情報をすでに追加しています。
if ( is_page_template() ) {
$classes[] = "{$post_type}-template";
$template_slug = get_page_template_slug( $post_id );
$template_parts = explode( '/', $template_slug );
foreach ( $template_parts as $part ) {
$classes[] = "{$post_type}-template-" . sanitize_html_class(
str_replace( array( '.', '/' ), '-', basename( $part, '.php' ) ) );
}
$classes[] = "{$post_type}-template-" . sanitize_html_class(
str_replace( '.', '-', $template_slug ) );
} else {
$classes[] = "{$post_type}-template-default";
}
もしあなたがsingle.php
をターゲットにするつもりなら、多くの場合そのためにカスタムボディクラスを追加する必要はありません。なぜなら get_body_class()
はすでに次のクラスを追加しているからです。
if ( is_single() ) {
$classes[] = 'single';
if ( isset( $post->post_type ) ) {
$classes[] = 'single-' . sanitize_html_class( $post->post_type, $post_id );
$classes[] = 'postid-' . $post_id;
// Post Format
if ( post_type_supports( $post->post_type, 'post-formats' ) ) {
$post_format = get_post_format( $post->ID );
if ( $post_format && !is_wp_error($post_format) )
$classes[] = 'single-format-' . sanitize_html_class( $post_format );
else
$classes[] = 'single-format-standard';
}
}
}
そのため、ほとんどの場合、デフォルトのボディクラスで十分です。