WP-CLI करते समय मैं एक प्लग को कैसे लोड होने से रोक सकता हूं?


13

मैं वर्तमान में मुख्य प्लगइन्स फ़ाइल में ही इस कोड का उपयोग करता हूं। लेकिन वह प्लगइन मेरा अपना नहीं है इसलिए मैं इस कोड को जोड़े बिना हर बार इसे सामान्य रूप से अपग्रेड करना पसंद करूंगा।

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    exit;
}

मुझे यह करने की आवश्यकता है क्योंकि यह प्लगइन त्रुटियों का उत्पादन करता है और सही ढंग से निष्पादित करने के लिए wp-cli को रोकता है, इसलिए मैं सिर्फ wp-cli के साथ प्लगइन को अक्षम नहीं कर सकता, मेरे कार्यों को करें और इसे फिर से सक्षम करें।

क्या कोई ऐसा तरीका है जिससे मैं if x then do not load plugin file xम्यू-प्लगइन के भीतर से कुछ कर सकता हूं ?

जवाबों:


13

प्लगइन्स लोड करने के लिए वर्डप्रेस पहली चीजों में से एक है जो डेटाबेस में सहेजे गए सक्रिय प्लगइन्स को प्राप्त करता है:

$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()है कि जल्दी वापस आ रहा है जब मूल्य को ग्राहकों / समान में बचाया जाता है और यह फ़िल्टर छोड़ दिया जाता है? (ज्यादातर मामलों के लिए काम नहीं करता है, केवल व्यवस्थापक प्लगइन स्क्रीन में इसे वास्तव में निष्पादित किया गया है)
किरो

हम्म। स्रोत को देखते हुए और जहां तक ​​मैं एकमात्र कारण बता सकता हूं कि option_फ़िल्टर लागू नहीं किया जाएगा यदि इसका कोई मूल्य नहीं है और डिफ़ॉल्ट वापस आ रहा है।
जैकब पीट्टी

यह वास्तव में मामला था (कोई प्लगइन्स सक्रिय नहीं)। मुझे अपने परीक्षण के वातावरण को बहुत अधिक साफ नहीं रखना चाहिए ..
केरो

1
मैंने इसे स्वीकार किया क्योंकि मेरे मामले में मुझे इसकी आवश्यकता थी। हालांकि सामान्य तौर --skip-plugin=xपर wp-cli का विकल्प इसे करने का एक बेहतर तरीका हो सकता है।
NextGenThemes

15

skip-pluginsWP-CLI का उपयोग करते समय अलग-अलग प्लगइन्स को लोड न करने के लिए आप WP-CLI में विकल्प का उपयोग कर सकते हैं ।

आप इसे इस तरह से कमांड में उपयोग कर सकते हैं:

wp user list --skip-plugins=my-plugin

या आप इसे अपनी wp-cli.ymlफ़ाइल में जोड़ सकते हैं :

skip-plugins:
- my-plugin

-1

बस प्लगइन dir नाम फिर से नामकरण इसे अक्षम कर देगा। मैं कभी-कभी एक प्लगइन को अस्थायी रूप से अक्षम करने के लिए करता हूं [linux]:

mv my-plugin-dir renamed-my-plugin-dir

ओपी केवल WP-CLI का उपयोग करते हुए प्लगइन को छोड़ना चाहता है, किसी अन्य गतिविधि के लिए नहीं जो एक ही समय में हो सकती है
मार्क कप्लून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.