如果小部件在当前页面上有内容,则仅显示侧边栏

时间:2018-08-09 作者:Skovsgaard

我在WooCommerce中有一个侧边栏,显示带有“产品类别”小部件的子类别。然而,当一个类别没有子类别时,我不想隐藏侧边栏。

is_active_sidebar 只检查侧栏是否有小部件,而不检查当前页面是否有小部件内容。因此,侧栏仍会显示,因为它确实包含一个小部件,但在没有子类别的类别上没有要显示的内容。

如何检查当前页面上是否有任何边栏小部件的内容,以便在没有显示内容的情况下使用该条件隐藏边栏?

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

is_active_widget函数是否可以动态检查添加到侧栏的每个小部件是否有内容,如果其中任何一个有内容,则返回true?

不,它不能。您可以检查是否有任何小部件在其上保存了数据,但小部件是否保存了数据并不能很好地指示它是否有任何要呈现的内容。这种方法唯一可行的方法是亲自检查每个可能的小部件,并记录哪些值会导致小部件呈现任何内容。

最接近的方法是捕获dynamic_sidebar() 具有output buffering 然后在输出任何内容之前检查其中是否有HTML:

<?php
ob_start();

dynamic_sidebar( \'sidebar\' );

$sidebar = ob_get_clean();

if ( $sidebar ) :
    ?>

    <aside class="sidebar">
        <?php echo $sidebar; ?>
    </aside>

    <?php
endif;
?>
问题是,即使用户看不到任何内容,一些小部件仍然可以输出HTML。在这种情况下,侧栏仍将呈现。可以通过使用strip_tags 要在检查侧栏是否为空之前删除任何HTML,请执行以下操作:

if ( trim( strip_tags( $sidebar ) ) ) :

endif;

结束

相关推荐

Searchresult sidebar change

那么,searchresult页面侧栏位于哪里?例如,在searchresult页面中,有一个“A”侧栏。但是,我想将其更改为“B”侧栏。我看着search.php 但无法理解侧边栏的来源。