Intereting Posts
Штрих-код полосы от конкретных типов сообщений (форматов) Не-UTF-символы ломают RSS-канал Как долго «как можно дольше» в wp_cache_set ()? Разница update_meta_user в i: 1 и b: 1, как писать b: 1 Пользовательский мета-ящик в редакторе настраиваемого типа сообщений не работает Использование обоих подкаталогов и поддоменов в Multisite Создание локатора хранилища с помощью Google Maps Как часто обновлять плагины WordPress Создайте динамическую вкладку buddupress Уведомление по электронной почте для автоматических обновлений плагинов Изменение количества текста, отображаемого на домашней странице Простая форма для добавления пользовательских ссылок в меню? Необходимо добавить / удалить группу параметров и отобразить их как строки Отображать все сообщения в настраиваемом типе сообщений, сгруппированные по пользовательской таксономии. Как сортировать сообщения по алфавиту и условия по ID? Как отображать большинство просматриваемых сообщений без каких-либо плагинов

Почему is_page_template () не добавляет класс body?

Я хочу условно добавить класс тела в зависимости от того, какой шаблон используется.

Я не могу понять, почему следующий код не работает …

function damsonhomes_body_classes( $classes ) { if (is_page_template('single.php')) { $classes[] = 'sans-hero'; } return $classes; } add_filter( 'body_class', 'damsonhomes_body_classes'); 

Спасибо всем

Solutions Collecting From Web of "Почему is_page_template () не добавляет класс body?"

Функция is_page_template() – это некорректная функция, используемая в этом случае, когда она проверяет шаблоны страниц, а single.php – это обычный шаблон, а не специальный для страницы, обычно предназначенный для сообщений.

Функция, которую вы, вероятно, собираетесь использовать вместо этого, is_single( $optional_posttype ) которая будет искать сингулярное представление типа post, post по умолчанию.

 if( is_single() ) { /** ... **/ } 

Вы также можете проверить базовое имя, если хотите:

 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 то во многих случаях нам не нужно добавлять к нему настраиваемый класс 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'; } } } 

Поэтому я бы сказал, что в большинстве случаев классы тела по умолчанию достаточны.