在前端和后端扩展Body类

时间:2012-09-17 作者:SunnyRed

我想为前端和管理区域扩展两个body类。我看到一些片段四处飘荡,这让我想到了以下内容

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;
}
这是正确的还是我遗漏了什么?

1 个回复
最合适的回答,由SO网友:Adam 整理而成

您的代码片段将以下类添加到前端的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\');

结束

相关推荐

About Hooks and Filters

嗯,我很难理解动作和过滤器之间的区别。我确实在代码中使用动作,但我是一个新手,甚至连一点过滤器都不知道。我去过codex,以及NickTheGeek、BillErickson、GaryJones等的多个网站,但没有去过vein。如果你能用简单的话告诉我,并举例说明动作、过滤器和挂钩的基本内容和区别。非常感谢。