多行页脚小工具区域

时间:2016-02-07 作者:Madeirense

我的函数上有一个函数。php,它根据活动侧栏的数量向页脚侧栏添加引导列col类。

我打算用它实现的是将页脚小部件扩展到最大可用空间。因此,例如,如果我只有一个页脚小部件区域处于活动状态,那么将应用col-md-12类。如果我有两个,将应用col-md-6类,以此类推。这是我的代码:

// Count the number of footer sidebars to enable dynamic classes for the footer top row.
if( ! function_exists( \'mytheme_footer_sidebars_top\' ) ) {
    function mytheme_footer_sidebars_top() {

        $active_sidebars = 0;

        if ( is_active_sidebar( \'footer-sidebar-1\' ) ) {
            $active_sidebars++;
        }

        if ( is_active_sidebar( \'footer-sidebar-2\' ) ) {
            $active_sidebars++;
        }

        if ( is_active_sidebar( \'footer-sidebar-3\' ) ) {
            $active_sidebars++;
        }

        if ( is_active_sidebar( \'footer-sidebar-4\' ) ) {
            $active_sidebars++;
        }

        $class = \'\';

        switch ( $active_sidebars ) {
            case \'1\':
                $class = \' col-sm-12\';
                break;
            case \'2\':
                $class = \' col-sm-6\';
                break;
            case \'3\':
                $class = \' col-sm-4\';
                break;
            case \'4\':
                $class = \' col-sm-3\';
                break;
        }

        echo $class;
    }
}

// Count the number of footer sidebars to enable dynamic classes for the footer bottom row.
if( ! function_exists( \'karnivorz_footer_sidebars_bottom\' ) ) {
    function karnivorz_footer_sidebars_bottom() {

        $active_sidebars = 0;

        if ( is_active_sidebar( \'footer-sidebar-5\' ) ) {
            $active_sidebars++;
        }

        if ( is_active_sidebar( \'footer-sidebar-6\' ) ) {
            $active_sidebars++;
        }

        if ( is_active_sidebar( \'footer-sidebar-7\' ) ) {
            $active_sidebars++;
        }

        if ( is_active_sidebar( \'footer-sidebar-8\' ) ) {
            $active_sidebars++;
        }

        $class = \'\';

        switch ( $active_sidebars ) {
            case \'1\':
                $class = \' col-sm-12\';
                break;
            case \'2\':
                $class = \' col-sm-6\';
                break;
            case \'3\':
                $class = \' col-sm-4\';
                break;
             case \'4\':
                 $class = \' col-sm-3\';
                 break;
        }

        echo $class;
    }
}
然后是我的边栏页脚。php如下所示:

<?php
    // Check if the any of the footer widget areas has widgets.
    if ( ! is_active_sidebar( \'footer-sidebar-1\' )
            && ! is_active_sidebar( \'footer-sidebar-2\' )
            && ! is_active_sidebar( \'footer-sidebar-3\' )
            && ! is_active_sidebar( \'footer-sidebar-4\' )
            && ! is_active_sidebar( \'footer-sidebar-5\' )
            && ! is_active_sidebar( \'footer-sidebar-6\' )
            && ! is_active_sidebar( \'footer-sidebar-7\' )
            && ! is_active_sidebar( \'footer-sidebar-8\' )
    )
    return;

    // Check which footer widget areas are active and apply formatting classes to them according to the number of active areas.
    ?>
    <div class="footer-sidebar" role="complementary">
        <div id="footer-top-sidebar-container" class="container">
            <div class="row">
                <?php if ( is_active_sidebar( \'footer-sidebar-1\' ) ) : ?>
                    <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_top(); ?>">
                        <?php dynamic_sidebar( \'footer-sidebar-1\' ); ?>
                    </div><!-- end footer-widget-area -->
                <?php endif; ?>

               <?php if ( is_active_sidebar( \'footer-sidebar-2\' ) ) : ?>
                   <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_top(); ?>">
                      <?php dynamic_sidebar( \'footer-sidebar-2\' ); ?>
                   </div><!-- end footer-widget-area -->
               <?php endif; ?>

               <?php if ( is_active_sidebar( \'footer-sidebar-3\' ) ) : ?>
                   <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_top(); ?>">
                       <?php dynamic_sidebar( \'footer-sidebar-3\' ); ?>
                   </div><!-- end footer-widget-area -->
               <?php endif; ?>

               <?php if ( is_active_sidebar( \'footer-sidebar-4\' ) ) : ?>
                   <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_top(); ?>">
                       <?php dynamic_sidebar( \'footer-sidebar-4\' ); ?>
                   </div><!-- end footer-widget-area -->
              <?php endif; ?>
          </div><!-- end row -->
     </div><!-- end container -->

<div id="footer-bottom-sidebar-container" class="container">
    <div class="row">
        <?php if ( is_active_sidebar( \'footer-sidebar-5\' ) ) : ?>
        <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_bottom(); ?>">
            <?php dynamic_sidebar( \'footer-sidebar-5\' ); ?>
        </div><!-- end footer-widget-area -->
        <?php endif; ?>

        <?php if ( is_active_sidebar( \'footer-sidebar-6\' ) ) : ?>
        <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_bottom(); ?>">
            <?php dynamic_sidebar( \'footer-sidebar-6\' ); ?>
        </div><!-- end footer-widget-area -->
        <?php endif; ?>

        <?php if ( is_active_sidebar( \'footer-sidebar-7\' ) ) : ?>
        <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_bottom(); ?>">
            <?php dynamic_sidebar( \'footer-sidebar-7\' ); ?>
        </div><!-- end footer-widget-area -->
        <?php endif; ?>

        <?php if ( is_active_sidebar( \'footer-sidebar-8\' ) ) : ?>
        <div class="footer-widget-area col-xs-12 <?php mytheme_footer_sidebars_bottom(); ?>">
            <?php dynamic_sidebar( \'footer-sidebar-8\' ); ?>
        </div><!-- end footer-widget-area -->
        <?php endif; ?>
    </div><!-- end row -->
</div><!-- end container -->

这对于一行小部件区域很好。但是,我现在想要实现的是能够拥有另一行完全相同的功能,这样用户也可以在页脚中添加多行小部件。例如,如果我重复完全相同的代码,并使用另一个名为mytheme\\u footer\\u sidebars\\u bottom的函数,我将能够实现这一点,但我确信这不是最好的方法,因为我将重复和重命名代码。因此,我想知道在不重复上述所有代码的情况下,实现此功能的最佳方法是什么。

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

只需向函数中添加一个变量,以便可以以不同于模板的方式调用它。。。

EDITED: 将页脚行传递给函数并返回类。。。

function mytheme_footer_sidebar_class($row) {

    if ($row == 1) {$i = 1; $j = 5;} 
    elseif ($row == 2) {$i = 5; $j = 9;}

    $active_sidebars = 0;

    for ($i; $i < $j; $i++) {
        if ( is_active_sidebar( \'footer-sidebar-\'.$i ) ) {
            $active_sidebars++;
        }
    }

    switch ( $active_sidebars ) {
        case \'1\':
            $class = \' col-sm-12\';
            break;
        case \'2\':
            $class = \' col-sm-6\';
            break;
        case \'3\':
            $class = \' col-sm-4\';
            break;
         case \'4\':
             $class = \' col-sm-3\';
             break;
    }

    return $class;
}
footer-sidebar.php 您只需执行一次即可,无需再次重复检查:

$rowclass1 = mytheme_footer_sidebar_class(1);
$rowclass2 = mytheme_footer_sidebar_class(2);

if ( ($rowclass1 == \'\') && ($rowclass2 == \'\') ) {return;}
然后代替<?php mytheme_footer_sidebars_top(); ?><?php mytheme_footer_sidebars_bottom(); ?> 使用<?php echo $rowclass1; ?> 和`。

然后还可以使用相同的变量包装和显示每一行。。。

 <?php if ($rowclass1 != \'\') : ?>
 <div id="footer-top-sidebar-container" class="container">
     .......................
 </div>
 <?php endif; ?>
。。。当然,您需要再注册4个小部件区域。。。这也会让最终用户在小部件页面上感到困惑,因此您可能需要添加一个主题选项来打开/关闭第二个页脚小部件区域。