प्लगइन्स लोड करने के लिए वर्डप्रेस पहली चीजों में से एक है जो डेटाबेस में सहेजे गए सक्रिय प्लगइन्स को प्राप्त करता है:
$active_plugins = (array) get_option( 'active_plugins', array() );
चूंकि यह उपयोग करता है get_option()हम option_active_pluginsमक्खी पर सक्रिय प्लगइन्स की सूची को संशोधित करने के लिए फ़िल्टर का उपयोग कर सकते हैं।
function wpse_301282_disable_plugin( $active_plugins ) {
if ( defined( 'WP_CLI' ) && WP_CLI ) {
$key = array_search( 'gravityforms/gravityforms.php', $active_plugins );
if ( $key ) {
unset( $active_plugins[$key] );
}
}
return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );
बस gravityforms/gravityforms.phpउस निर्देशिका की जगह और फ़ाइलनाम के साथ बदलें जिसे आप अक्षम करना चाहते हैं।
यहाँ समस्या यह है कि हम प्लगइन्स के लोडिंग को प्रभावित करने की कोशिश कर रहे हैं, इसलिए हम ऐसा किसी प्लगइन के भीतर से नहीं कर सकते , क्योंकि यह बहुत देर हो चुकी है। विषय में भी बहुत देर हो जाएगी।
शुक्र है कि वर्डप्रेस में "मस्ट यूज़ प्लगिन्स" होते हैं, ये वे प्लगइन्स हैं जिन्हें आप नियमित प्लगइन्स से पहले और अलग-अलग लोड किए गए हैं, और नियमित प्लगइन्स सूची में दिखाई नहीं देते हैं।
इस कोड को मस्ट यूज़ प्लगइन में जोड़ने के लिए आपको एक wp-content/mu-pluginsनिर्देशिका बनाने की आवश्यकता है (यदि यह पहले से मौजूद नहीं है) और उस कोड के साथ एक PHP फ़ाइल (इसे कुछ भी कहा जा सकता है) बनाएं। आप एक प्लगइन हेडर या कुछ और की जरूरत नहीं है।
वर्डप्रेस लोड होने पर अब वह कोड अन्य सभी प्लगइन्स से पहले लोड हो जाएगा। चूंकि हमारा फ़िल्टर जगह में है, जब वर्डप्रेस को आपके द्वारा निष्क्रिय किए जाने वाले प्लगइन को लोड करने के लिए सक्रिय प्लगइन्स की सूची मिलती है, तो WP-CLI सक्रिय होने पर उस सूची से फ़िल्टर किया जाएगा।
get_option()है कि जल्दी वापस आ रहा है जब मूल्य को ग्राहकों / समान में बचाया जाता है और यह फ़िल्टर छोड़ दिया जाता है? (ज्यादातर मामलों के लिए काम नहीं करता है, केवल व्यवस्थापक प्लगइन स्क्रीन में इसे वास्तव में निष्पादित किया गया है)