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