問題描述

是否可以包含或排除分配給命名的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。