问题描述

是否可以包含或排除分配给命名的 dynamic_sidebar 调用的特定命名小工具?

例如,如果我注册了一个名为”my_sidebar” 的边栏,并且用户已经在其中放置了一个”Links” 小工具,我希望能够根据我的主题选项面板中的自定义设置来包含或排除它。

这可能吗?

任何见解非常感激。

最佳解决方案

dynamic_sidebar()调用 wp_get_sidebars_widgets()来获取每个边栏的所有小工具。我想过滤这个输出是从侧边栏中删除小工具的最佳方式。

add_filter( 'sidebars_widgets', 'wpse17681_sidebars_widgets' );
function wpse17681_sidebars_widgets( $sidebars_widgets )
{
    if ( is_page() /* Or whatever */ ) {
        foreach ( $sidebars_widgets as $sidebar_id => &$widgets ) {
            if ( 'my_sidebar' != $sidebar_id ) {
                continue;
            }
            foreach ( $widgets as $idx => $widget_id ) {
                // There might be a better way to check the widget name
                if ( 0 === strncmp( $widget_id, 'links-', 6 ) ) {
                    unset( $widgets[$idx] );
                }
            }
        }
    }

    return $sidebars_widgets;
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。