मैं "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
क्या आप इसे ए के रूप में लिख सकते हैं और कृपया इसे स्वीकार कर सकते हैं? धन्यवाद!
—
1:15
नहीं, क्योंकि मुझे पता चला कि यह सही ढंग से काम नहीं कर रहा है। ऐसा लगता है कि अन्य साइडबार से सेटिंग हटा रहा है
—
onetrickpony
तो फिर आपको Q. Hm से "मुझे एक हल मिल गया" निकालना चाहिए?
—
केसर
अपडेट किया गया। मेरे पास एक और कोशिश करने जा रहा हूं जब मेरे पास समय होगा
—
onetrickpony
क्या आपने इसे एक
—
कैसर
if ( is_admin() && /* page does here */ )
बयान में लपेटने की कोशिश की है ? मुझे लगता है कि आप हर अनुरोध पर उन विगेट्स को हटा रहे हैं। ठीक है: संपादित करें। इसके बारे में कुछ सोचने के बाद, आपकी समस्या यह हो सकती है कि आप update_option
जो वैश्विक स्तर पर सुलभ हैं (विजेट के लिए सटीक इंटर्ल्स नहीं जानते हैं)। हो सकता है कि आप हस्तक्षेप करने के लिए अपने कस्टम विकल्प के साथ एक कस्टम सीमित विजेट विकल्प और निष्क्रिय विजेट क्षेत्र को "फ़ीड" कर सकें।