Widget yönetici sayfası inanılmaz derecede yavaş, çünkü "wp_inactive_widgets" kenar çubuğundan maksimum 10 widget sayısını sınırlamak çalışıyorum:
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;
}
Bu görünüşte çalışıyor, ancak sorun, widget örneği bir kenar çubuğunun içinde olup olmadığına bakılmaksızın, widget örneği seçeneklerinin hala veritabanında kalmasıdır ...
Widget seçeneklerini de kaldırmanın bir yolunu bilen var mı?
Bir çözüm buldum:
Düzenleme: bazı durumlarda widget'ları diğer kenar çubuklarından da kaldırıyor gibi görünüyor, buna ne neden olduğundan emin değilim ...
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;
1
Bunu A olarak yazabilir ve kabul edildi olarak işaretleyebilir misiniz? Teşekkürler!
—
kaiser
Hayır, çünkü düzgün çalışmadığını öğrendim. Diğer kenar çubuklarından ayarları kaldırıyor gibi görünüyor
—
onetrickpony
O zaman Q. Hm? "Bir çözüm buldum?"
—
kaiser
Güncellenmiş S.
—
Zamanım
Bir
—
kaiser
if ( is_admin() && /* page does here */ )
ifadeye sarmaya çalıştınız mı ? Sanırım asıl nokta, her bir istekte bu widget'ları global olarak kaldırmanızdır. Tamam: Düzenle. Bunu düşündükten sonra, sorununuz update_option
küresel olarak erişilebilir olan (widget'lar için kesin iç kısımları bilmediğiniz) olabilir. Özel bir sınırlı pencere öğesi seçeneğini güncelleyebilir ve paraziti önlemek için etkin olmayan pencere öğesi alanını özel seçeneğinizle "besleyebilirsiniz".