Cum să obții o listă cu toate widget-urile înregistrate în zona de widget-uri WordPress
Încerc să dezactivez câteva widget-uri standard în tema mea functions.php
.
Prin urmare, am scris această funcție mică, care funcționează bine:
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);
Acum vreau să dezactivez alte widget-uri care pot fi instalate/activate de alte plugin-uri. Dar nu știu cum să obțin o listă cu toate numele claselor de widget-uri înregistrate, ca să le pot dezactiva cu unregister_widget()
?

Widget-urile sunt stocate într-o variabilă publică $widgets
în clasa WP_Widget_Factory
. Puteți accesa această clasă prin variabila globală $wp_widget_factory
.
Pentru a obține toate widget-urile înregistrate, listați cheile:
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>';
});
Pentru a elimina toate widget-urile, fie dezînregistrați fiecare widget separat cu unregister_widget()
(recomandat), fie goliți array-ul dintr-o singură rulare:
add_action( 'widgets_init', function()
{
if ( empty ( $GLOBALS['wp_widget_factory'] ) )
return;
$GLOBALS['wp_widget_factory']->widgets = array();
}, 20);

Cu toate acestea, această metodă returnează widget-uri din plugin-uri, dar nu pare să returneze niciun widget înregistrat personalizat

@DerkJanSpeelman probabil pentru că acestea sunt înregistrate mai târziu, dar sperăm că în cadrul aceleiași acțiuni widget_init
. Încearcă să schimbi prioritatea de la 20 la 100 sau chiar 1000 și vezi ce obții. Plugin-urile/temele/codul bun ar trebui să-și înregistreze întotdeauna widget-urile în timpul widget_init
.
