Cum să obții o listă cu toate widget-urile înregistrate în zona de widget-uri WordPress

13 oct. 2013, 12:34:17
Vizualizări: 13.9K
Voturi: 7

Î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()?

0
Toate răspunsurile la întrebare 1
3
16

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);
13 oct. 2013 14:13:52
Comentarii

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

Derk Jan Speelman Derk Jan Speelman
15 iun. 2017 15:46:07

@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.

Anastis Anastis
25 ian. 2018 16:38:19

Această metodă returnează toate widget-urile, chiar și din teme dezactivate. Există o modalitate de a returna doar widget-urile disponibile din tema activă curentă?? Vă rog ajutați-mă

karlosuccess karlosuccess
2 iul. 2023 09:43:47