ฉันพยายาม จำกัด จำนวนวิดเจ็ตจากแถบข้าง "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 และทำเครื่องหมายว่าเป็นที่ยอมรับได้ไหม ขอบคุณ!
—
ไกเซอร์
ไม่เพราะฉันพบว่ามันทำงานไม่ถูกต้อง ดูเหมือนว่าจะลบการตั้งค่าจากแถบด้านข้างอื่น ๆ
—
onetrickpony
จากนั้นคุณควรลบ "ฉันพบวิธีแก้ปัญหา" ออกจาก Q. Hm หรือไม่
—
ไกเซอร์
Updated Q. ฉันจะให้มันลองอีกเมื่อฉันมีเวลา
—
onetrickpony
คุณพยายามห่อมันไว้ใน
—
ไกเซอร์
if ( is_admin() && /* page does here */ )
คำแถลง? ฉันเดาว่าประเด็นคือคุณกำลังลบวิดเจ็ตเหล่านั้นไปทั่วทุกคำขอ ตกลง: แก้ไข หลังจากที่คิดถึงบางอย่างปัญหาของคุณอาจเป็นเพราะคุณใช้update_option
สิ่งที่เข้าถึงได้ทั่วโลก (ไม่ทราบว่าเป็นเครื่องมือภายในอย่างแน่นอน) บางทีคุณสามารถอัปเดตตัวเลือกวิดเจ็ตแบบ จำกัด ที่กำหนดเองและ "ฟีด" พื้นที่วิดเจ็ตที่ไม่ได้ใช้งานด้วยตัวเลือกที่กำหนดเองของคุณเพื่อหลีกเลี่ยงการรบกวน