J'essaie de limiter le nombre de widgets de la barre latérale "wp_inactive_widgets" à 10 maximum, car la page d'administration des widgets est incroyablement lente:
add_filter('pre_update_option_sidebars_widgets', 'cleanup_inactive_widgets', 10, 2);
function cleanup_inactive_widgets($new, $old){
if(!empty($new['wp_inactive_widgets']) && count($new['wp_inactive_widgets']) > 10)
$new['wp_inactive_widgets'] = array_slice($new['wp_inactive_widgets'], -10, 10);
return $new;
}
Cela fonctionne apparemment, mais le problème est que les options d'instance de widget restent dans la base de données, que l'instance de widget existe ou non dans une barre latérale ...
Est-ce que quelqu'un connaît également un moyen de supprimer les options du widget?
J'ai trouvé une solution:
Edit: dans certaines situations, il semble également supprimer les widgets des autres barres latérales, je ne sais pas ce qui cause cela ...
if(!empty($new['wp_inactive_widgets']) && count($new['wp_inactive_widgets']) > 10){
// find out which widget instances to remove
$removed_widgets = array_slice($new['wp_inactive_widgets'], 0, -10);
// remove instance options
foreach($removed_widgets as $widget_id)
if(isset($GLOBALS['wp_registered_widgets'][$widget_id])){
$instance = $GLOBALS['wp_registered_widgets'][$widget_id]['callback'][0]->number;
$option_name = $GLOBALS['wp_registered_widgets'][$widget_id]['callback'][0]->option_name;
$options = get_option($option_name); // get options of all instances
unset($options[$instance]); // remove this instance's options
update_option($option_name, $options);
}
// keep only the last 10 records from the inactive widgets area
$new['wp_inactive_widgets'] = array_slice($new['wp_inactive_widgets'], -10, 10);
}
return $new;
if ( is_admin() && /* page does here */ )
déclaration? Je suppose que le fait est que vous supprimez globalement ces widgets à chaque demande partout. Ok: éditez. Après y avoir réfléchi, votre problème pourrait être que vous utilisez update_option
ce qui est accessible globalement (je ne connais pas les internes exacts pour les widgets). Vous pouvez peut-être mettre à jour une option de widgets limitée personnalisée et "alimenter" la zone des widgets inactifs avec votre option personnalisée pour contourner les interférences.