web-dev-qa-db-fra.com

Comment puis-je supprimer tous les widgets inactifs?

Je veux nettoyer tous les widgets inactifs. J'ai essayé de suivre l'extrait de code comme suggéré par cette réponse Script pour supprimer tous les widgets inactifs? .

$sidebars_widgets = get_option( 'sidebars_widgets' );
$sidebars_widgets['wp_inactive_widgets'] = array();
update_option( 'sidebars_widgets', $sidebars_widgets );

J'ai également essayé de supprimer l'option sidebars_widgets directement à partir du tableau des options.

Mais après l'actualisation de la page, l'ancienne valeur est restaurée avec tous les widgets inactifs. Comment puis-je supprimer tous ces widgets inactifs à la fois? Merci d'avance.

2
Nilambar

Vous devriez le faire avec l'action after_setup_theme:

function remove_inactive_widgets() {
     $sidebars_widgets = get_option( 'sidebars_widgets' );
     $sidebars_widgets['wp_inactive_widgets'] = array();
     update_option( 'sidebars_widgets', $sidebars_widgets );
}
add_action( 'after_setup_theme', 'remove_inactive_widgets' );
1
Behzad

Les personnalisations de widgets sont enregistrées dans le widget même. Donc, en plus de supprimer le sidebars_widgets, vous devez également supprimer les données personnalisées du widget.

$sidebars_widgets = get_option('sidebars_widgets');
foreach ($sidebars_widgets as $key => $value) {
    foreach ($value as $widget_id) {
        $pieces = explode('-', $widget_id);
        $multi_number = array_pop($pieces);
        $id_base = implode('-', $pieces);
        $widget = get_option('widget_' . $id_base);

        //Here it deletes the widget customizations that are linked to an id
        unset($widget[$multi_number]);

        update_option('widget_' . $id_base, $widget);
    }

    //Here it erases all the page's widget. Set ampty array.
    $sidebars_widgets[$key] = array();
}
update_option('sidebars_widgets', $sidebars_widgets);
0
Sergio Cabral