BODY_CLASS过滤器--有没有更好的方法来编写这段代码?

时间:2015-07-23 作者:user3438958

我想添加一个主体类,这取决于哪些侧栏处于活动状态,如果我的前标题小部件区域处于活动状态,则添加一个主体类。我已经把它做好了,但我只想知道是否有更好的方法把它写成我的before header widget area function 出于某种原因,需要超越我的sidebar function, 否则,我的sidebar function 如果我的before header widget area function 处于活动状态。所以我肯定在那里的某个地方有一些不好的实践代码。

以下是有效的:

// add body class if before-header-widget is active
add_filter( \'body_class\', \'body_class_before_header\' );
function body_class_before_header( $classes ) {

    if ( is_active_sidebar( \'before-header-widget-area\' ) ) {
        $classes[] = \'before-header\';
        return $classes;
    } 
}


// add body classes for sidebars
add_filter( \'body_class\', \'body_class_layouts\' );
function body_class_layouts( $classes ) {

    // add body class if both sidebars are active
    if ( is_active_sidebar( \'sidebar-right\' ) && is_active_sidebar( \'sidebar-left\' ) ) {
        $classes[] = \'sidebar-content-sidebar\';
        return $classes;
    }

    // add body class for if right sidebar is active
    elseif ( is_active_sidebar( \'sidebar-right\' ) ) {
        $classes[] = \'content-sidebar\';
        return $classes;
    }

    // add body class for if left sidebar is active
    elseif ( is_active_sidebar( \'sidebar-left\' ) ) {
        $classes[] = \'sidebar-content\';
        return $classes;
    }

    // add body class if no sidebars are active
    else {
        $classes[] = \'full-width-content\';
        return $classes;
    }
}
但如果我只是以另一种方式交换函数:

 // add body classes for Sidebars
    add_filter( \'body_class\', \'body_class_layouts\' );
    function body_class_layouts( $classes ) {

        // add body class if both sidebars are active
        if ( is_active_sidebar( \'sidebar-right\' ) && is_active_sidebar( \'sidebar-left\' ) ) {
            $classes[] = \'sidebar-content-sidebar\';
            return $classes;
        }

        // add body class for if right sidebar is active
        elseif ( is_active_sidebar( \'sidebar-right\' ) ) {
            $classes[] = \'content-sidebar\';
            return $classes;
        }

        // add body class for if left sidebar is active
        elseif ( is_active_sidebar( \'sidebar-left\' ) ) {
            $classes[] = \'sidebar-content\';
            return $classes;
        }

        // add body class if no sidebars are active
        else {
            $classes[] = \'full-width-content\';
            return $classes;
        }
    }

    // add body class if before-header-widget is active
    add_filter( \'body_class\', \'body_class_before_header\' );
    function body_class_before_header( $classes ) {

        if ( is_active_sidebar( \'before-header-widget-area\' ) ) {
            $classes[] = \'before-header\';
            return $classes;
        } 
    }
如果before-header-widget 处于活动状态。我不想要我的sidebars function 与我的before-header-widget 作用感谢您的帮助。

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

我认为没有更聪明的方法以过程风格编写此代码,因此基本上您的代码看起来不错。

但是你的body_class_before_header() 可能导致问题的函数:如果未执行条件块,函数将返回NULL 但由于它是对过滤器的回调,因此它应始终至少返回未过滤的参数值:

// add body class if before-header-widget is active
add_filter( \'body_class\', \'body_class_before_header\' );
function body_class_before_header( $classes ) {

    if ( is_active_sidebar( \'before-header-widget-area\' ) ) {
        $classes[] = \'before-header\';
        //don\'t return here (only)
    }

    //return $classes anyway
    return $classes;
}
也许还有一个小小的语法改进。

function body_class_layouts( $classes ) {

    // add body class if both sidebars are active
    if ( is_active_sidebar( \'sidebar-right\' ) && is_active_sidebar( \'sidebar-left\' ) ) {
        $classes[] = \'sidebar-content-sidebar\';
    }

    // add body class for if right sidebar is active
    elseif ( is_active_sidebar( \'sidebar-right\' ) ) {
        $classes[] = \'content-sidebar\';
    }

    // add body class for if left sidebar is active
    elseif ( is_active_sidebar( \'sidebar-left\' ) ) {
        $classes[] = \'sidebar-content\';
    }

    // add body class if no sidebars are active
    else {
        $classes[] = \'full-width-content\';
    }

    return $classes;
}
我删除了所有return 语句,并将其移动到函数末尾。这可能有助于避免NULL 在特定条件下返回。

结束

相关推荐

用javascrip获取html数据到php数组并存储到wordpress数据库

我想做的是将拖放到可拖放区域的项目存储到php数组中,以便存储到数据库中,以便从主题的其他部分访问存储的数组Here is my code. 索引。php<?php /* Plugin Name: Drag And Drop Plugin URI: https://wordpress.com/ Description: DD is a test plugin Version: 1.0.0 Author: Puni Charana A