Расширение классов тела спереди и сзади


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

add_filter('body_class','add_custom_body_classes');
add_filter('admin_body_class', 'add_custom_body_classes');

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

function add_custom_body_classes($classes) {
    $someClassA = 'someText';
    $someClassB = 'someText';

    if (is_array($classes)) {
        $classes[] = $someClassA;
        $classes[] = $someClassB;
    }
    else {
        $classes .= ' ' . $someClassA;
        $classes .= ' ' . $someClassB;
    }
    return $classes;
}

Это правильно или чего мне не хватает?

Author: SunnyRed, 2012-09-17

1 answers

Ваш фрагмент кода добавляет следующие классы в тег body на переднем конце,

someText
someText

Ваш фрагмент кода добавляет следующие классы в тег body на задней панели,

someClassA
someClassB

Если это ваш предполагаемый результат, то да, это работает и правильно.

Вы также могли бы сделать,

function add_custom_body_classes($classes) {

    $someClassA = 'someText';
    $someClassB = 'someText';

    if (is_array($classes)) {
        $classes[] = $someClassA;
        $classes[] = $someClassB;
    }
    elseif (is_admin()) {
        $classes .= ' ' . someClassA;
        $classes .= ' ' . someClassB;
    }
    return $classes;
}

add_filter('body_class','add_custom_body_classes');
add_filter('admin_body_class', 'add_custom_body_classes');

С помощью условного оператора is_admin убедитесь, что вы находитесь на странице администратора, прежде чем добавлять определенные классы.

Если ничего из вышеперечисленного не верно, и вы хотите того же классы (someText) должны отображаться как спереди, так и сзади, затем вам нужно изменить...

$classes .= ' ' . someClassA;
$classes .= ' ' . someClassB;

Чтобы показать,

$classes .= ' ' . $someClassA;
$classes .= ' ' . $someClassB;

Так как вы отсутствовали $ в именах переменных.

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

function add_custom_body_classes($classes) {

$classes = array('classA', 'classB', 'classC');
$string  = implode($classes, ' ');

    if (!is_admin() && is_array($classes)) {
        return $classes;
    }
    elseif (is_admin()) {
        return $string;
    }
}

add_filter('body_class','add_custom_body_classes');
add_filter('admin_body_class', 'add_custom_body_classes');
 2
Author: Adam, 2012-09-17 19:40:13