Как добавить класс к body в админке WordPress через хук body_class

5 мар. 2012 г., 08:51:15
Просмотры: 14K
Голосов: 22

Хук body_class, похоже, работает только с неадминистративными страницами. Когда я делаю:

add_filter('body_class', 'add_body_classes');
function add_body_classes($classes) {
        $classes[] = 'myclass';
        return $classes;
}

Есть ли другой хук, который я должен использовать, если хочу добавить класс к тегу body на странице админки?

0
Все ответы на вопрос 4
2
26

Админ-страницы не используют фильтр body_class, вместо этого используйте фильтр admin_body_class для добавления классов к тегу body в админке.

Обратите внимание, что в этом случае $classes — это строка, а не массив.

5 мар. 2012 г. 09:45:44
Комментарии

Стоит отметить, что параметр $classes в методе фильтра admin_body_class является строкой, а не массивом https://developer.wordpress.org/reference/hooks/admin_body_class/

Roman Epicnerd Sharf Roman Epicnerd Sharf
25 мая 2016 г. 19:30:31

Хотелось бы, чтобы @Mamaduka добавил этот комментарий в ответ. Я полностью разобрал весь сайт, прежде чем заметил комментарий Romans.

Zeth Zeth
5 нояб. 2020 г. 15:35:59
3
17

Mamaduka ответил и направил меня в правильном направлении, вот код для добавления классов к тегу body в админ-панели.

Функция обратного вызова должна возвращать допустимое значение для атрибута класса HTML, то есть имена классов, разделённые пробелами. Также не забудьте добавить (в начало или конец) любые существующие классы, что станет понятно из кода.

add_filter( 'admin_body_class', 'my_admin_body_class' );

/**
 * Добавляет один или несколько классов к тегу body в админ-панели.
 *
 * @link https://wordpress.stackexchange.com/a/154951/17187
 * @param  String $classes Текущие классы body.
 * @return String          Изменённые классы body.
 */
function my_admin_body_class( $classes ) {
    return "$classes my_class";
    // Или: return "$classes my_class_1 my_class_2 my_class_3";
}
17 июл. 2014 г. 20:52:38
Комментарии

Это, вероятно, должно быть выбранным ответом. В оригинальной реализации автора вопроса возвращается массив, но хук принимает строку, разделённую пробелами: https://developer.wordpress.org/reference/hooks/admin_body_class/. Выбранный ответ, следовательно, вводит в заблуждение, так как он лишь частично отвечает на вопрос и не предоставляет ссылок.

pwbred pwbred
2 окт. 2015 г. 22:30:38

Чтобы упростить реализацию PHP, если вы не программист, без использования строк в двойных кавычках, можно сделать так же, как return $classes.' my-class my-other-class';

Jonas Lundman Jonas Lundman
10 июн. 2018 г. 14:42:33

Я использую return sprintf('%s folded', $classes); для своего удобства.

besrabasant besrabasant
14 мар. 2019 г. 08:27:31
0

Добавление нескольких классов, особенно когда они должны отображаться на основе определённых условий, может привести к нестабильному HTML-выводу. Чтобы правильно их форматировать, а также иметь возможность удалять дубликаты или существующие классы, можно преобразовать их в массив и в конце снова объединить в строку:

add_filter('admin_body_class', static function ($classes) {
    $classes = explode(' ', $classes);
    
    $classes = array_merge($classes, [
        'my-class-one',
        'my-class-two',
        'my-class-three',
        some_function(),
        another_function(),
    ]);

    return implode(' ', array_unique($classes));
});
28 авг. 2020 г. 10:34:26
0
-1

Один из хуков, который я использую для редактирования админки WordPress/Dashboard - это admin_head

    function remove_screen_options(){ 

    $hideCSS = '<style>#screen-meta-links { display: none; }</style>';

} 

Этот код добавит CSS в админ-часть вашего сайта

Используя класс .wp-admin, вы можете стилизовать body-часть админки.

Удачи

5 мар. 2012 г. 09:49:51