Описание
Выводит различные css классы. Предназначен для применения к тегу <body>.
В темах WordPress можно использовать Тег Шаблона body_class(), который может пригодится разработчикам тем, чтобы эффективнее использовать CSS селекторы. Функция body_class() дописывает к тегу body различные классы, в зависимости от того на какой странице находится посетитель, залогинен он или нет и т.д. (например, class="home logged-in").
body_class() работает на базе get_body_class().
Функция выводит на экран список css классов.
Использование
<body <?php body_class($class); ?>>
Параметры
- $class (строка/массив)
- Название одного или нескольких классов, которые нужно добавить к списку, выводимых функцией классов. При добавлении нескольких классов разделяйте их пробелом.
По умолчанию: нет
Список классов, выводимых body_class
Функция может выводить следующий список классов (аргумент class может содержать как одно, так и несколько значений из этого списка):
- rtl
- home
- blog
- archive
- date
- search
- paged
- attachment
- error404
- single postid-(id)
- page-id-(page_id)
- attachmentid-(id)
- attachment-(mime-тип)
- author
- author-(user_nicename)
- category
- category-(slug)
- tag
- tag-(slug)
- page-parent
- page-child parent-pageid-(id)
- page-template page-template-(название файла шаблона)
- search-results
- search-no-results
- logged-in
- paged-(номер страницы)
- single-paged-(номер страницы)
- page-paged-(номер страницы)
- category-paged-(номер страницы)
- tag-paged-(номер страницы)
- date-paged-(номер страницы)
- author-paged-(номер страницы)
- search-paged-(номер страницы)
- tax-(название таксономии) (с версии 3.1)
- term-(название термина) (с версии 3.1)
- admin-bar (с версии 3.1)
Где, какие классы выводятся
В квадратных кавычках ([]) классы, которые выводятся при определенных условиях.
- Главная страница сайта
-
- Если в настройках "чтения", главной страницей установлено значение по умолчанию (выводить список последних постов), то будут добавлены классы: blog home [ paged paged-n ];
- Если, в качестве главной страницы установлена "постоянная страница", будут следующие классы: home page page-id-ID;
- Если установлена страница поста, то классы будут: blog [ paged paged-n ].
- Страница поста
- На странице записи (поста) будут выведены следующие классы: single postid-ID [ paged paged-n single-paged-n]
- Постоянная страница
-
- Для всех видов постоянных страниц будут выведены следующие классы: page page-id-ID [ page-template page-template-template_file_name ] [ paged paged-n page-paged-n ]
- Если это родительская страница: page page-id-ID page-parent [ page-template page-template-template_file_name ] [ paged paged-n page-paged-n ]
- Если это дочерняя страница: page page-id-ID page-child parent-pageid-parent-ID [ page-template page-template-template_file_name ] [ paged paged-n page-paged-n ]
- Страница Автора
- На странице с записями определенного автора, будут показаны классы: archive author author-user_nicename [ paged paged-n author-paged-n ]
- Категория
- На страницах категорий: archive category category-slug [ paged paged-n category-paged-n ]
- Метки
- На страницах меток: archive tag tag-slug [ paged paged-n tag-paged-n ]
- Архивы
-
- Страницы архивов (даты, категории, метки, авторы и.п.): archive [ paged paged-n author-paged-n ]
- Страницы архивов по дате: archive date [ paged paged-n date-paged-n ]
- Поиск
- На странице поиска, будут выведены следующие селекторы:
- для удачного поиска: search search-results [ paged paged-n search-paged-n ];
- для неудачного поиска: search search-no-results [ paged paged-n search-paged-n ].
- Вложения
- На странице вложений (картинки, файлы, видео и т.д): attachment single postid-ID attachmentid-postID attachment-mime-type
- страница 404
- На странице ошибки 404: error404
- Авторизация
- Если пользователь залогинен, то на всех страницах будет присутствовать селектор: logged-in
Примеры
1. Применение.
Пример, показывающий как применяется функция:
<body <?php body_class(); ?>>
В результате, в HTML коде мы получим следующее:
<body class="page page-id-2 page-template page-template-default logged-in">
А в сss описываться это будет так:
.page {
/* стили для постоянной страницы */
}
.page-id-2 {
/* стили для постоянной страницы с ID=2 */
}
.logged-in {
/* стили для всех страниц, когда пользователь авторизован */
}
2. Добавим свой, произвольный класс:
<body <?php body_class('class-name'); ?>>
Получим:
<body class="class-name post post-id-24">
3. Добавка классов через фильтр.
Классы можно добавить с применением условий. Для этого воспользуемся фильтром body_class. Код нужно вставить в файл темы function.php:
add_filter('body_class','my_class_names');
function my_class_names($classes) {
// добавим класс 'class-name' в массив классов $classes
$classes[] = 'class-name';
return $classes;
}
3.1. Добавим слаг категории как класс для страниц постов. Слаг категории будет тот, к которому относится пост:
function category_id_class($classes) {
global $post;
foreach((get_the_category($post->ID)) as $category)
$classes[] = $category->category_nicename;
return $classes;
}
add_filter('post_class', 'category_id_class');
add_filter('body_class', 'category_id_class');
Пример не очень удачный, потому что грузовой, для такого пустяка как добавить класс. Этот пример, больше подходит для демонстрации возможностей.
Код «body_class»
из файла (WP 3.3): /wp-includes/post-template.phpfunction body_class( $class = '' ) {
// Separates classes with a single space, collates classes for body element
echo 'class="' . join( ' ', get_body_class( $class ) ) . '"';
}Связанные Функции
post_class(), sticky_class(), comment_class(), paginate_links()
Ещё из раздела
the_title(), the_meta(), post_password_required(), the_content(), the_excerpt(), the_ID(), the_shortlink()
Смотрите также: Функции WordPress и Теги Шаблона.
Чиню чужой шаблон. body_class() выдает кроме классов еще и
body style="overflow-x: hidden;" class="...
в результате горизонтальная полоса прокрутки отсутствует. Никак не могу найти, где эту напасть прикрутили.
Я вам искренне сочувствую - нет ничего хуже чем ковырять чужие ляпы
Попробуйте удалить все фильтры у body_class, используя remove_all_filters(), чтобы убедится что эта гадость через фильтр цепляется.