为什么IS_PAGE_TEMPLATE()不添加Body类?

时间:2017-04-03 作者:richerimage

我想根据使用的模板有条件地添加一个body类。

我不明白为什么下面的代码不起作用。。。

function damsonhomes_body_classes( $classes ) {

  if (is_page_template(\'single.php\')) {

    $classes[] = \'sans-hero\';

  }

  return $classes;

}

add_filter( \'body_class\', \'damsonhomes_body_classes\');
谢谢大家

2 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

这个is_page_template() 函数是在这种情况下使用的不正确函数,因为它检查Page Templatessingle.php 只是一个普通的模板,而不是特定于页面的模板,通常用于帖子。

您可能希望使用的功能是is_single( $optional_posttype ) 它将查找post类型的单一视图,post 默认情况下。

if( is_single() ) {
    /** ... **/
}
如果您确实想:

global $template;
$template_slug = basename( $template );

if( \'single.php\' === $template_slug ) {
 /** ... **/
}

SO网友:birgire

请注意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 在许多情况下,我们不需要为此添加自定义的body类,因为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\';
        }
    }
}
所以我想说,在大多数情况下,默认的body类就足够了。

相关推荐

Calculations in functions.php

我为自己创建了一个发票主题,并试图在自定义列中获取发票总额。我已经尝试调整模板页面中使用的代码,以便在函数中显示这一点。php文件,但它不工作。我的乘法操作数出现了一个操作数错误,我不知道为什么。这是我的代码(如有任何帮助,将不胜感激)。if( $column_name == \'invoice_total\' ) { $hours = 0; // This allows counting of each sub_field //* Set repeater va