将小部件显示为侧栏备用

时间:2013-07-08 作者:Dominic P

我试图找到一种仅在给定侧栏为空时显示小部件的方法。我正在使用Widget Logic 来控制一些小部件,但我很难弄清楚在这种情况下如何使用它。我试着抓住widget_logic_eval_override 这似乎是应该做的,但我不确定如何确定侧边栏在该函数中是否为空。

不幸的是,我想使用的小部件来自第三方插件,我不想重写它。因此,我无法在小部件的源代码中轻松实现这一点。

Update:在看了答案并进一步思考之后,我对这个问题有了更好的理解。在分配给侧栏的所有小部件都“执行”之前,无法知道侧栏是否为空因此,当我们在小部件之间循环时,我们不知道是否需要显示回退小部件。

可以将给定的小部件指定为回退。然后,当我们在小部件中循环时,我们不显示回退,而是将对它的引用保存在某个全局变量中。然后,当我们输出侧栏时,如果没有输出任何内容,我们将访问全局变量并显示fallback小部件。这有意义吗?这似乎是一个非常复杂的解决方案,所以我想知道是否有更简单的方法。

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

如果要显示回退侧栏,可以执行以下操作。如果要决定显示哪个小部件,请使用idk。

创建2个侧栏。示例:sidebarfallback-sidebar.

在模板中,您可以使用:

if(is_active_sidebar( \'sidebar\' )){
dynamic_sidebar( \'sidebar\' );
} else {
dynamic_sidebar( \'fallback-sidebar\' );
}
如果您只是想确定某个特定侧栏是否处于活动状态,请查找侧栏的id并使用:

if(is_active_sidebar( $sidebarID )){
//do stuff here
}
这可能有用:(对不起,我不在电脑上,我可以在电脑上测试)

if(is_active_sidebar( $sidebarID )){
the_widget(\'WP_Widget_Archives\', $instance, $args);
}
//I believe this will attempt to display the WP_Widget_Archives widget, if the
//sidebar with the id of $sidebarID is inactive.

SO网友:Wyck

您可以使用,

is_dynamic_sidebar(); //returns boolean
如果您需要使用小部件逻辑,因为它仍然是“活动的”,那么这里还有另一个黑客解决方案:https://stackoverflow.com/questions/2468813/wordpress-how-to-know-if-a-sidebar-is-empty-without-loading-it (不能百分之百肯定它会起作用)。

SO网友:brasofilo

基于this Answer (使用带有小部件逻辑的自定义函数)和this one (在侧边栏上获取小部件的数量),我编写了以下代码:

function check_my_widget_logic( $sidebar_index )
{
    global $_wp_sidebars_widgets;
    $index = "sidebar-{$sidebar_index}";
    if( empty( $_wp_sidebars_widgets[ $index ] ) )
        return true;

    return false;
}
小部件逻辑中的用法:check_my_widget_logic(3). 使用目标侧栏的ID作为函数参数(3 在本例中)。

可以在admin中查看小部件:

enter image description here

结束

相关推荐

Reorder dashboard widgets

我最近试图通过编写插件对仪表板小部件进行重新排序。我做到了这一点:使用以下代码:<?php /* * Plugin Name: Custom Dashboard * Description: Custom dashboard for Avare sites. * Author: Avare * Version: 1.0 */ function sort_dashboard_widgets() { $lef