Próbuję ograniczyć liczbę widżetów z paska bocznego „wp_inactive_widgets” do maksymalnie 10, ponieważ strona administracyjna widgetów jest niezwykle powolna:
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;
}
To działa najwyraźniej, ale problem polega na tym, że opcje instancji widgetu nadal pozostają w bazie danych, niezależnie od tego, czy instancja widgetu istnieje, czy nie wewnątrz paska bocznego ...
Czy ktoś zna sposób na usunięcie opcji widgetu?
Znalazłem rozwiązanie:
Edycja: w niektórych sytuacjach wydaje się, że usuwa również widżety z innych pasków bocznych, nie jestem pewien, co to powoduje ...
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 */ )
oświadczenie? Chyba chodzi o to, że globalnie usuwasz te widżety na każde żądanie wszędzie. Ok: Edytuj. Po zastanowieniu się nad tym problem może dotyczyć korzystania z niego,update_option
który jest dostępny globalnie (nie znam dokładnych elementów wewnętrznych widżetów). Może możesz zaktualizować niestandardową opcję ograniczonych widżetów i „karmić” nieaktywny obszar widżetów za pomocą niestandardowej opcji, aby ominąć zakłócenia.Odpowiedzi:
Testowany w wersji 3.2.1:
Powyższy kod ogranicza nieaktywny pasek boczny do ostatnich 10 widżetów i tylko nieaktywny pasek boczny. Usuwa również opcje usuniętych widżetów.
źródło