获取在WordPress管理小部件区域中注册的所有小部件的列表

时间:2013-10-13 作者:Tobias

我试图在我的主题中禁用几个标准小部件functions.php. 因此,我编写了这个小函数,它工作得很好:

function my_widget_ctrl() {
     unregister_widget(\'WP_Widget_Pages\');
     unregister_widget(\'WP_Widget_Calendar\');
     unregister_widget(\'WP_Widget_Archives\');
     unregister_widget(\'WP_Widget_Links\');
     unregister_widget(\'WP_Widget_Meta\');        
     unregister_widget(\'WP_Widget_Text\');       
     unregister_widget(\'WP_Widget_Recent_Posts\');
     unregister_widget(\'WP_Widget_Recent_Comments\');
     unregister_widget(\'WP_Widget_RSS\');
     unregister_widget(\'WP_Widget_Tag_Cloud\');        

 }
 add_action(\'widgets_init\', \'my_widget_ctrl\', 11);

现在我想禁用一些其他小部件,这些小部件可能由其他插件安装/激活。但我不知道如何获得所有已注册小部件类名的列表,因此我可以使用注销它们unregister_widget()?

1 个回复
SO网友:fuxia

小部件存储在公共变量中$widgets 在课堂上WP_Widget_Factory. 您可以通过全局变量访问此类$wp_widget_factory.

要获取所有已注册的小部件,请列出键:

add_action( \'wp_footer\', function()
{
    if ( empty ( $GLOBALS[\'wp_widget_factory\'] ) )
        return;

    $widgets = array_keys( $GLOBALS[\'wp_widget_factory\']->widgets );
    print \'<pre>$widgets = \' . esc_html( var_export( $widgets, TRUE ) ) . \'</pre>\';
});
要删除所有小部件,请使用分别注销每个小部件unregister_widget() (首选)或在一次运行中清空阵列:

add_action( \'widgets_init\', function()
{
    if ( empty ( $GLOBALS[\'wp_widget_factory\'] ) )
        return;

    $GLOBALS[\'wp_widget_factory\']->widgets = array();
}, 20);

结束

相关推荐

Remove Widgets in Dashboard

另一个noob问题。。。当作者登录并访问其仪表板时,他们会看到各种小部件,例如Internet Explorer警告、WordPress动态新闻。是否要为所有用户(现在和将来)删除所有这些内容,以便他们只看到“快速按”&;\'现在的小部件?谢谢