body_class

Выводит css классы относящиеся к текущей странице. Предназначен для использования в теге <body>.

В темах WordPress можно использовать Тег Шаблона body_class(), который может пригодится разработчикам тем, чтобы эффективнее использовать CSS селекторы. Функция body_class() дописывает к тегу body различные классы, в зависимости от того на какой странице находится посетитель, залогинен он или нет и т.д. (например, class=”home logged-in”).

Чтобы добавить дополнительные классы используйте параметр $class или фильтр body_class (см. примеры):

✈ 1 раз = 0.000176с = быстро | 50000 раз = 3.11с = быстро PHP 7.0.14, WP 4.7

Хуков нет.

Возвращает

Выводит на экран список 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)

Где, какие классы выводятся

Для вывода классов используются условные теги. Ниже зависимость добавляемого в список класса, от срабатывания условного тега:

is_front_page()home

is_home()blog

is_attachment()attachment

is_search() — search

  • Есть найдено: search-results.
  • Если не найдено: search-no-results.

is_single() — single postid-(ID поста)

  • Если пост: single-post
  • Если произвольный типа поста: single-(тип поста)
  • Если поддерживаются форматы постов: single-format-{формат} или single-format-standard
  • Если вложение (прикрепленные файлы): attachment single-attachment attachmentid-{ID} attachment-mime-type

is_page() — page page-id-{ID страницы}

  • Родительская страница: page-parent
  • Дочерняя страница: page-child parent-pageid-{ID}
  • Шаблон страницы:
    • Шаблон указан: page-template page-template-{имя файла}-php
    • Шаблон не указан: page-template-default

is_archive()archive

  • По дате:date
  • Тип поста: post-type-archive post-type-archive-{тип поста}
  • Автор: author author-{имя}
  • Рубрики: category category-{ярлык}
  • Метки: tag tag-{ярлык}
  • Таксономия: tax-{таксономия} term-{ярлык термина} term-{ID}
  • Архив формата постов: tax-post_format term-post-format-{формат} term-{ID}

is_paged() — paged paged-{номер страницы}

  • Пост: single-paged-{номер страницы}
  • Страница: page-paged-{номер страницы}
  • Рубрика: category-paged-{номер страницы}
  • Метка: tag-paged-{номер страницы}
  • Архив по дате: date-paged-{номер страницы}
  • Архив автора: author-paged-{номер страницы}
  • Поиск: search-paged-{номер страницы}
  • Новый тип записи: post-type-paged-{номер страницы}

Если есть настраиваемый фон

  • custom-background
    Делается такая проверка: 

    <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

    Классы можно добавить с применением условий. Добавим класс только для постоянных страниц (is_page()). Для этого воспользуемся фильтром body_class. Код нужно вставить в файл темы function.php:

    add_filter('body_class','my_class_names');
    function my_class_names( $classes ) {
    	// добавим класс 'class-name' в массив классов $classes
    	if( is_page() )
    		$classes[] = 'it_is_page';
    
    	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');

    Пример не очень удачный, потому что грузовой, для такого пустяка как добавить класс. Этот пример, больше подходит для демонстрации возможностей.

    #3.2. Добавим имя родительской страницы в классы body

    Этот пример добавляет ярлык родительской страницы в классы body, когда мы находимся на дочерней странице:

    add_filter('body_class', 'add_page_parent_to_body_class');
    function add_page_parent_to_body_class( $classes ){
    	global $post;
    
    	if( is_page() && $post->post_parent ){
    		$post_data = get_post( $post->post_parent );
    		$classes[] = 'parent_page-' . $post_data->post_name;
    	}
    
    	return $classes;
    }

    #4. Добавим класс только, когда показывается сайдбар

    В примере 3 было показано как добавлять дополнительные CSS классы через фильтр body_class. Ниже пример демонстрирует, как добавить новый класс, только когда показывается сайдбар. Этот код нужно вставить в файл темы functions.php:

    add_action('wp_head', create_function("",'ob_start();') );
    add_action('get_sidebar', 'my_sidebar_class');
    add_action('wp_footer', 'my_sidebar_class_replace');
    
    function my_sidebar_class($name=''){
      static $class="withsidebar";
      if(!empty($name))$class.=" sidebar-{$name}";
      my_sidebar_class_replace($class);
    }
    
    function my_sidebar_class_replace($c=''){
      static $class='';
      if(!empty($c)) $class=$c;
      else {
    	echo str_replace('<body class="','<body class="'.$class.' ',ob_get_clean());
    	ob_start();
      }
    }

    Пример взят из кодекса. На мой взгляд не очень удачно решение. Но если кому-то очень надо, то может пригодится, пожалуй.

    Код из


    wp-includes/post-template.php

    WP 4.7.2

    <?php
    function body_class( $class = '' ) {
    	// Separates classes with a single space, collates classes for body element
    	echo 'class="' . join( ' ', get_body_class( $class ) ) . '"';
    }

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *