क्यों Active_plugin register_activation_hook में काम नहीं कर रहा है


10

मैं पहले प्लगइन को सक्रिय करते हुए स्वचालित रूप से दूसरे प्लगइन को सक्रिय करने की कोशिश कर रहा हूं।

register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
        include_once(ABSPATH .'/wp-admin/includes/plugin.php');
        activate_plugin('hello.php');
}

इसके अंदर काम नहीं कर रहा है register_activation_hook .. अगर मैं इसे सीधे उपयोग करता हूं तो इसका काम:

include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');

मेरे द्वारा यह कैसे किया जा सकता है? सहायता के लिए धन्यवाद

समाधान:

मैं अब अपने लिए इसका उपयोग कर रहा हूं:

// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_inactive($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            /* for some reason, 
            activate_plugin($dependent); 
               is not working */
            activate_plugin('hello.php');
        });
    }
}); 

// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_active($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            deactivate_plugins('hello.php');
        });
    }
}); 

मैंने मूल रूप से आपके पोस्ट को गलत बताया है। मुझे कहना पड़ा, यह सही ढंग से स्वरूपित है। क्या यह कार्य आपके प्लगइन के मुख्य भाग में है?
क्रिस

बस एक पल। मेरी पोस्ट को संपादित करने की आवश्यकता है।
क्रिस

हाँ इसके पहले प्लगइन में जो दूसरे प्लगइन को सक्रिय करने की कोशिश कर रहा है .. दूसरा प्लगइन है hello.php उदाहरण के लिए
Korkmaz

जवाबों:


8

क्या हो रहा है, इस पोस्ट की पूरी व्याख्या के लिए (यह प्लग-इन को निष्क्रिय करने के लिए है, लेकिन समस्या समान है)।

संक्षिप्त विवरण: प्लग-इन अनिवार्य रूप से डेटाबेस में संग्रहीत सक्रिय पग-इन्स के सरणी में जोड़कर सक्रिय किया जाता है। जब आप पहले प्लग-इन को सक्रिय करते हैं, तो वर्डप्रेस सभी वर्तमान में सक्रिय प्लग-इन की सरणी को पुनः प्राप्त करता है, प्लग-इन को इसमें जोड़ता है (लेकिन अभी तक डेटाबेस को अपडेट नहीं करता है) और फिर आपका इंस्टॉलेशन कॉलबैक चलाता है।

यह इंस्टॉलेशन कॉलबैक आपका कोड चलाता है।

उसके बाद वर्डप्रेस उपरोक्त सरणी के साथ डेटाबेस को अपडेट करता है, जिसमें पहला नहीं बल्कि दूसरा प्लग-इन होता है। इस प्रकार आपका दूसरा प्लग-इन सक्रिय नहीं होता है।

समाधान: उपरोक्त लिंक में वर्णित है कि समाधान कुछ इस तरह है (अप्रयुक्त):

//This goes inside Plugin A.
//When A is activated. activate B.
register_activation_hook(__FILE__,'my_plugin_A_activate'); 
function my_plugin_A_activate(){
    $dependent = 'B/B.php';
    if( is_plugin_inactive($dependent) ){
         add_action('update_option_active_plugins', 'my_activate_dependent_B');
    }
}

function my_activate_dependent_B(){
    $dependent = 'B/B.php';
    activate_plugin($dependent);
}

यदि आपके पास समय है, तो मैं अपने प्रश्न को यह लिखने के लिए संपादित करता हूं कि मैं अभी क्या उपयोग कर रहा हूं। आप active_plugin ($ आश्रित) देख सकते हैं; प्लगइन सक्रिय करते समय काम नहीं कर रहा है। किसी भी विचार कैसे तय करने के लिए?
सनल कोरकमाज़

अपने कोड को एक परीक्षण प्लग-इन (और एक अन्य परीक्षण hello.phpपरीक्षण प्लग-इन बनाना - यह मेरे लिए ठीक काम करता है) की नकल करना । याद रखें कि यदि प्लग-इन उपनिर्देशिका में मौजूद है, तो आपको फ़ोल्डर देने की आवश्यकता होगी: उदा hello/hello.php
स्टीफन हैरिस

मेरा कोड सामान्य काम करेगा .. समस्या तब शुरू हो रही है जब आप activate_plugin('hello.php');लाइन बदलेंगेactivate_plugin($dependent);
Kनसाल कोरकमाज़

ऐसा इसलिए है क्योंकि आपके कॉलबैक के लिए दिया गया वैरिएबल hello.phpवर्तमान में सक्रिय प्लग-इन की सरणी नहीं है । आप कॉलबैक की तरह अपने स्वयं के चर पास नहीं कर सकते। जब तक आप वर्ग / वैश्विक चर का उपयोग नहीं करते हैं, तब तक आपको उपयोग करना होगा activate_plugin('hello.php');। लेकिन यह एक समस्या नहीं होनी चाहिए ...?
स्टीफन हैरिस

अच्छी तरह से मैं जगह tbh के बहुत सारे में एक ही चर लिखने के लिए पसंद नहीं है। लेकिन यह एक बड़ी बात नहीं है। thx a बहुत
alnsal Korkmaz

2

यहाँ कोई समझा रहा है कि यह उसके लिए काम क्यों नहीं कर रहा था, और कैसे उसे एक्टिव_प्लगिन विधि की नकल करनी थी और समस्या के बिना खुद का एक कस्टम बनाना था: /programming/1415958/how-to- सक्रिय-वर्डप्रेस-प्लगइन्स-आंतरिक

यहाँ सक्रिय_प्लगिन कोड का मूल स्रोत है, जिसका उपयोग आप अपना कार्य बनाने के लिए कर सकते हैं और देख सकते हैं कि यह आपके लिए कहाँ काम नहीं कर रहा है: http://hitchhackerguide.com/2011/02/11/activate_plugin/

यहां एक संभावित समाधान है, जिसमें एक वैकल्पिक प्लगइन सक्रियण विधि है जिसे किसी अन्य व्यक्ति ने संभवतः उस स्रोत कोड से सीटी बजाया है: कोड के माध्यम से प्लगइन्स को कैसे सक्रिय करें?


वह समाधान अभी भी register_activation_hook में काम नहीं कर रहा है
Knsal Korkmaz

सौभाग्य से, अब जब आपके पास प्लगइन को सक्रिय करने का अपना तरीका है, तो आपको इसे डिबग करने में सक्षम होना चाहिए और यह पता लगाना चाहिए कि यह कहाँ असफल है? :) क्या आपने डिफ़ॉल्ट के बजाय अपने कस्टम active_plugin विधि का उपयोग करने के लिए अपने register_activation_hook को बदल दिया है? यदि ऐसा है, तो कुछ ट्रिगर_रियर स्टेटमेंट में फेंक दें और पता करें कि यह कहाँ विफल हो रहा है। उदाहरण के लिए, शुरू करने के लिए एक अच्छी जगह यह पता लगाने के लिए होगी कि आपका तरीका क्या है जब यह विफल हो रहा है।
mltsy

मैंने डिबगिंग के लिए अपनी पूरी कोशिश की, लेकिन मुझे इसका कारण नहीं मिला। हो सकता है कि सक्रिय_प्लगिन्स विकल्प को अपडेट होने के बाद register_activation_hook निष्पादित किया गया हो।
सनल कोरकमाज़

मुझे क्षमा करें, मैंने बस उन दो लिंक का क्रम तय किया था, जिन्हें मैंने (अंतिम दो) स्वैप किया था। क्या आप "कोड के माध्यम से प्लगइन को कैसे सक्रिय करें" शीर्षक से कोड का उपयोग कर रहे हैं? एक और उपयोगी संकेत प्रदान करने के लिए डिफ़ॉल्ट activate_pluginविधि का वापसी मूल्य होगा । आप trigger_errorरिटर्न मान ज्ञात करने के लिए उपयोग कर सकते हैं , और इसे यहां पोस्ट कर सकते हैं।
16
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.