is_active_sidebar() problem

时间:2017-12-27 作者:tpaksu

我正在尝试开发一个带有英雄滑块的wordpress主题,我使用一些第三方滑块小部件插入英雄小部件区域,我定义为sidebar-hero 在我的functions.php 文件

我使用以下代码显示英雄滑块:

<?php if(is_active_sidebar("sidebar-hero")) : ?>
    <?php dynamic_sidebar("sidebar-hero");?>
    <script type="text/javascript">document.body.classList.add("hero-widget-enabled");</script>
<?php else: ?>
<div class="carousel-page-container container">
    <div class="header-filter" style=\'background-image: url(/wp-content/themes/sometheme/assets/images/demo/back.png)\'>
        <div class="header-filter-gradient"></div>
        </div>
    </div>
</div>
<?php endif;?>
现在的问题是,我将自定义滑块添加到侧栏英雄小部件区域,它显示了滑块。我从窗口小部件中删除滑块,它显示默认图像。但是,当我从扩展页面禁用滑块而不将其从小部件区域中删除时,它仍会尝试显示动态侧栏。

这个is_active_sidebar() 方法返回true 即使侧栏英雄小部件区域的小部件设置页面中显示了任何小部件。

您对此问题有什么解决方案吗?是wordpress的bug,还是我做错了什么?

Update

wp_get_sidebars_widgets() 显示此输出(其中smartslider3-2 不应包括,因为其插件已禁用):

array(6) {
  ["wp_inactive_widgets"]=>
  array(11) {
    [0]=>
    string(10) "archives-2"
    [1]=>
    string(10) "archives-4"
    [2]=>
    string(6) "meta-2"
    [3]=>
    string(8) "search-2"
    [4]=>
    string(8) "search-4"
    [5]=>
    string(6) "text-2"
    [6]=>
    string(12) "categories-2"
    [7]=>
    string(14) "recent-posts-2"
    [8]=>
    string(17) "recent-comments-2"
    [9]=>
    string(6) "text-3"
    [10]=>
    string(11) "tag_cloud-2"
  }
  ["sidebar-primary"]=>
  array(3) {
    [0]=>
    string(12) "categories-3"
    [1]=>
    string(11) "tag_cloud-1"
    [2]=>
    string(10) "calendar-1"
  }
  ["sidebar-footer-1"]=>
  array(1) {
    [0]=>
    string(14) "recent-posts-3"
  }
  ["sidebar-footer-2"]=>
  array(1) {
    [0]=>
    string(7) "pages-2"
  }
  ["sidebar-footer-3"]=>
  array(1) {
    [0]=>
    string(11) "tag_cloud-3"
  }
  ["sidebar-hero"]=>
  array(1) {
    [0]=>
    string(14) "smartslider3-2"
  }
}

1 个回复
SO网友:Levi Dulstein

在这种情况下,我只需检查滑块插件是否已激活-因此您的条件语句如下所示:

 <?php if ( is_active_sidebar( \'sidebar-hero\' ) && 
            is_plugin_active( \'slider-plugin-dir/slider-plugin-base-file.php\' ) 
 ) : ?>
wp_get_sidebars_widgets 在您的情况下,它会按预期工作-它会检查wp\\U选项表中的小部件,并保留小部件,因为它仍然存在。这很有意义-停用插件与删除小部件并不相同,此功能不用于检查小部件的依赖关系。

结束

相关推荐

Page full of widgets?

有没有可能创建一个只有很多小部件的页面?我看到的大多数WP站点的小部件都在侧边栏中,但我想要一个只有小部件而没有其他内容的页面。我当前使用的主题允许我向页面添加列或表,但我不知道(在任何主题中)是否可以向这些列或表单元格添加小部件?