J'essaie de désactiver quelques widgets standard dans mon thème functions.php
. J'ai donc écrit cette petite fonction qui fonctionne bien:
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);
Maintenant, je veux désactiver d'autres widgets, qui peuvent être installés/activés par d'autres plugins. Mais je ne sais pas comment obtenir une liste de tous les noms de classes de widgets enregistrés, je peux donc les désenregistrer avec unregister_widget()
?
Les widgets sont stockés dans une variable publique $widgets
dans la classe WP_Widget_Factory
. Vous pouvez accéder à cette classe par la variable globale $wp_widget_factory
.
Pour obtenir tous les widgets enregistrés, listez les clés:
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>';
});
Pour supprimer tous les widgets, annulez l'inscription de chaque widget séparément avec unregister_widget()
(préféré) ou videz le tableau en une fois:
add_action( 'widgets_init', function()
{
if ( empty ( $GLOBALS['wp_widget_factory'] ) )
return;
$GLOBALS['wp_widget_factory']->widgets = array();
}, 20);