Я намагаюся обмежити кількість віджетів із бічної панелі "wp_inactive_widgets" до максимуму 10, оскільки сторінка адміністратора віджетів неймовірно повільна:
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;
}
Це працює, мабуть, але проблема полягає в тому, що параметри примірника віджетів як і раніше залишаються в базі даних, незалежно від того, існує чи примірник віджета всередині бічної панелі ...
Хтось знає спосіб видалення параметрів віджетів?
Я знайшов рішення:
Редагувати: у певних ситуаціях, здається, видалити віджети й з інших бічних панелей, я не впевнений, що це спричиняє ...
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
Чи можете ви написати це як A і позначити його як прийняте? Дякую!
—
кайзер
Ні, тому що я з’ясував, що він працює не правильно. Здається, видалення налаштувань з інших бічних
—
панелей
Тоді вам слід видалити "Я знайшов рішення" з Q. Гм?
—
кайзер
Оновлено Q. Я збираюся ще раз спробувати, коли
—
встигну
Чи намагалися ви зафіксувати це у
—
кайзер
if ( is_admin() && /* page does here */ )
заяві? Думаю, справа в тому, що ви видаляєте ці віджети в усьому світі з кожного запиту скрізь. Гаразд: Редагувати. Подумавши про це, ваша проблема може полягати в тому, що ви користуєтеся update_option
доступним у всьому світі (не знаєте точних даних про віджети). Можливо, ви можете оновити користувацький обмежений варіант віджетів і "подати" неактивну область віджетів за допомогою власного варіанту, щоб уникнути перешкод.