Question

I have the following functions

    function header_class() {
    $count = 0;

    if ( is_active_sidebar( 'sidebar-15' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-16' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-17' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-18' ) )
        $count++;   

    $class = '';

    switch ( $count ) {
        case '1':
            $class = 'one';
            break;
        case '2':
            $class = 'two';
            break;
        case '3':
            $class = 'three';
            break;
        case '4':
            $class = 'four';
            break;  
    }

    if ( $class )
        echo 'class="' . $class . '"';
}


function footer_class() {
    $count = 0;

    if ( is_active_sidebar( 'sidebar-11' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-12' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-13' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-14' ) )
        $count++;   

    $class = '';

    switch ( $count ) {
        case '1':
            $class = 'one';
            break;
        case '2':
            $class = 'two';
            break;
        case '3':
            $class = 'three';
            break;
        case '4':
            $class = 'four';
            break;  
    }

    if ( $class )
        echo 'class="' . $class . '"';
}

I'm trying to combine these as one function namely theme_body_classes. Now this piece of code is common to both functions, so they need not to be repeated.

$class = '';

    switch ( $count ) {
        case '1':
            $class = 'one';
            break;
        case '2':
            $class = 'two';
            break;
        case '3':
            $class = 'three';
            break;
        case '4':
            $class = 'four';
            break;  
    }

    if ( $class )
        echo 'class="' . $class . '"';

My question is, how do I combine the other parts of these two functions (as in the example below) together without stuffing up my counter.

$count = 0;
//counter1
    if ( is_active_sidebar( 'sidebar-15' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-16' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-17' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-18' ) )
        $count++;

    //counter 2
    if ( is_active_sidebar( 'sidebar-11' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-12' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-13' ) )
        $count++;

    if ( is_active_sidebar( 'sidebar-14' ) )
        $count++;   
Was it helpful?

Solution

Read a bit about "dependency injection", that is quite a handsome pattern...

function get_sidebar_class( $sidebars ) {
    // cound active sidebars
    $count = 0;
    foreach ($sidebars as $sidebar)
        if ( is_active_sidebar( $sidebar ) )
            $count++;

    // name the class state
    $classes = [ 0=>'', 'one', 'two', 'three', 'four' ];    
    $class = isset($classes[$count]) ? $classes[$count] : '';

    // output information
    if ( $class )
        echo sprintf( 'class="%s"', $class);
}

get_sidebar_class( ['sidebar-11', 'sidebar-12', 'sidebar-13', 'sidebar-14'] );
get_sidebar_class( ['sidebar-15', 'sidebar-16', 'sidebar-17', 'sidebar-18'] );

This syntax requires php in version >= 5.4. If you are still using an older version you have to use the explicit array construction instead: get_sidebar_class( array('sidebar-11', 'sidebar-12', 'sidebar-13', 'sidebar-14') ); and $classes = array( 'one', 'two', 'three', 'four' );...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top