Saya mencoba membatasi jumlah widget dari bilah samping "wp_inactive_widgets" menjadi maksimum 10, karena halaman admin widget sangat lambat:
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;
}
Ini tampaknya berhasil, tetapi masalahnya adalah bahwa opsi instance widget masih tetap ada dalam database, terlepas dari apakah instance widget itu ada atau tidak di dalam bilah sisi ...
Apakah ada yang tahu cara untuk menghapus opsi widget juga?
Saya menemukan solusinya:
Sunting: dalam situasi tertentu sepertinya menghapus widget dari sidebar lain juga, saya tidak yakin apa yang menyebabkan ini ...
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 */ )
pernyataan? Saya kira intinya adalah bahwa Anda menghapus widget secara global pada setiap permintaan di mana-mana. Oke: Edit. Setelah beberapa memikirkannya, masalah Anda mungkin adalah Anda menggunakanupdate_option
yang dapat diakses secara global (tidak tahu internal yang tepat untuk widget). Mungkin Anda dapat memperbarui opsi widget terbatas khusus dan "mengumpankan" area widget tidak aktif dengan opsi kustom Anda untuk menghindari gangguan.Jawaban:
Diuji di bawah v3.2.1:
Kode di atas membatasi sidebar tidak aktif hingga 10 widget terakhir, dan hanya sidebar tidak aktif. Ini juga menghapus opsi untuk widget yang telah dihapus.
sumber