it-swarm.com.de

Holen Sie sich eine Liste aller Widgets, die im WordPress Admin Widgets-Bereich registriert sind

Ich versuche, einige Standard-Widgets in meinem Design functions.php zu deaktivieren. Deshalb habe ich diese kleine Funktion geschrieben, die gut funktioniert:

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);

Jetzt möchte ich einige andere Widgets deaktivieren, die möglicherweise von anderen Plugins installiert/aktiviert werden. Ich weiß jedoch nicht, wie ich eine Liste aller registrierten Widget-Klassennamen abrufen kann, damit ich sie bei unregister_widget() abmelden kann.

5
Tobias

Widgets werden in einer öffentlichen Variablen $widgets in der Klasse WP_Widget_Factory gespeichert. Sie können auf diese Klasse über die globale Variable $wp_widget_factory zugreifen.

Um alle registrierten Widgets zu erhalten, listen Sie die Schlüssel auf:

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>';
});

Um alle Widgets zu entfernen, müssen Sie entweder die Registrierung der einzelnen Widgets bei unregister_widget() (bevorzugt) aufheben oder das Array in einem Durchgang leeren:

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

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