我的函数上有一个函数。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的函数,我将能够实现这一点,但我确信这不是最好的方法,因为我将重复和重命名代码。因此,我想知道在不重复上述所有代码的情况下,实现此功能的最佳方法是什么。
最合适的回答,由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个小部件区域。。。这也会让最终用户在小部件页面上感到困惑,因此您可能需要添加一个主题选项来打开/关闭第二个页脚小部件区域。