Ottenere un elenco di tutti i Widget registrati nell'area widget di WordPress admin

13 ott 2013, 12:34:17
Visualizzazioni: 13.9K
Voti: 7

Sto cercando di disabilitare alcuni widget standard nel mio tema functions.php. Ho scritto questa piccola funzione, che funziona bene:

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

Ora voglio disabilitare alcuni altri Widget, che potrebbero essere installati/attivati da altri Plugin. Ma non so come ottenere un elenco di tutti i nomi delle classi dei widget registrati, in modo da poterli deregistrare con unregister_widget()?

0
Tutte le risposte alla domanda 1
3
16

I widget sono memorizzati in una variabile pubblica $widgets all'interno della classe WP_Widget_Factory. Puoi accedere a questa classe tramite la variabile globale $wp_widget_factory.

Per ottenere tutti i widget registrati, elenca le chiavi:

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

Per rimuovere tutti i widget, puoi deregistrare ogni widget singolarmente con unregister_widget() (opzione preferita) oppure svuotare l'array in un'unica operazione:

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

    $GLOBALS['wp_widget_factory']->widgets = array();
}, 20);
13 ott 2013 14:13:52
Commenti

Tuttavia, questo restituisce i widget dai plugin, ma non sembra restituire alcun widget personalizzato registrato

Derk Jan Speelman Derk Jan Speelman
15 giu 2017 15:46:07

@DerkJanSpeelman probabilmente perché vengono registrati più tardi, ma si spera durante la stessa azione widget_init. Prova a cambiare la priorità da 20 a 100 o anche 1000 e vedi cosa ottieni. I plugin/temi/codici ben scritti dovrebbero sempre registrare i widget durante widget_init.

Anastis Anastis
25 gen 2018 16:38:19

Questo restituisce tutti i widget, anche quelli dei temi disattivati. C'è un modo per restituire solo i widget disponibili dal tema attualmente attivo?? Per favore aiuto

karlosuccess karlosuccess
2 lug 2023 09:43:47