जब मल्टीसिट पर नेटवर्क सक्रिय हो तो एक्टिवेशन फंक्शन कैसे चलाएं?


12

मैं अपने प्लगइन को बहु-संगत बनाने की कोशिश कर रहा हूं। जब प्लगइन सक्रिय होता है तो register_activation_hook()मैं अपने फ़ंक्शन को पंजीकृत करने के लिए फ़ंक्शन का उपयोग कर रहा हूं my_activate()। यह एकल-साइट इंस्टॉल पर अच्छी तरह से काम करता है।

function my_activate() {
    // Do some things.
}
register_activation_hook( __FILE__, 'my_activate' );

समस्या यह my_activate()है कि प्रत्येक साइट के लिए नहीं चलता है, जब मेरा प्लगइन 'नेटवर्क सक्रिय' है। जब नेटवर्क पर नई साइटें बनाई जाती हैं, तब भी यह नहीं चलती है।

जब मेरी प्लगइन नेटवर्क में सभी साइटों के लिए सक्रिय हो और b) मल्टीसिट नेटवर्क पर एक नई साइट बनाई जाती है, तो मैं अपनी सक्रियण दिनचर्या ) को कैसे चला सकता हूं ?

जवाबों:


21

जब आपका प्लगइन नेटवर्क सक्रिय हो या किसी एक साइट के लिए सक्रिय हो तो आपका कॉलबैक फ़ंक्शन चलना चाहिए । किसी भी तरह से, यह काम करना चाहिए।

हालाँकि, यदि आप अपने नेटवर्क में प्रत्येक ब्लॉग के लिए चलाए जाने वाले कॉलबैक के भीतर मौजूद कोड का इरादा रखते हैं, तो ध्यान रखें कि यह बॉक्स से बाहर नहीं होगा, इसके बजाय, आपके कॉलबैक के भीतर का कोड प्राथमिक ब्लॉग संदर्भ में होगा।

यदि नेटवर्क सक्रियण पर प्रत्येक ब्लॉग पर आपके कोड को चलाने की आवश्यकता है:

function my_plugin_activate($network_wide) {

    if ( is_multisite() && $network_wide ) { 

        global $wpdb;

        foreach ($wpdb->get_col("SELECT blog_id FROM $wpdb->blogs") as $blog_id) {
            switch_to_blog($blog_id);
            //do your specific thing here...
            restore_current_blog();
        } 

    } else {
        //run in single site context
    }

}

register_activation_hook( __FILE__, 'my_plugin_activate' );

यदि नया ब्लॉग बनाते समय आपके कोड को चलाने की आवश्यकता होती है:

function my_plugin_new_blog($blog_id, $user_id, $domain, $path, $site_id, $meta) {

    //replace with your base plugin path E.g. dirname/filename.php
    if ( is_plugin_active_for_network( 'my-plugin-name-dir/my-plugin-name.php' ) ) {
        switch_to_blog($blog_id);
        //do your specific thing here...
        restore_current_blog();
    } 

}

add_action('wpmu_new_blog', 'my_plugin_new_blog', 10, 6 );

इसके अतिरिक्त:

पढ़ने वालों के लिए जो समान कार्यक्षमता चाहते हैं, लेकिन उन सभी प्लगइन्स के लिए जो नेटवर्क सक्रिय हो जाते हैं (न कि केवल एक जिसे आप नियंत्रित करते हैं, यदि सभी पर लागू होता है) , तो आप देखने की इच्छा कर सकते हैं: https://wordpress.org/plugins/proper-network -एक्टिवेशन / जो यह सुनिश्चित करेगा कि आपके मल्टीसाइट नेटवर्क में प्रत्येक प्लगइन जिसमें नेटवर्क सक्रिय है, उसके दोनों register_activation_hookऔर register_deactivation_hookप्रत्येक ब्लॉग संदर्भ में चलाए जा सकते हैं।


समाधान के लिए धन्यवाद, बहुत सराहना की! आपके पहले वाक्य के बारे में, मैंने अपने प्रश्न के शब्द को थोड़ा अद्यतन किया है।
मेंहदी लेखक

3
@henrywright register_activation_hookसिर्फ एक आवरण है add_action('activate_' . $file, $function)जिसके चारों ओर अपने आप में आग होती है, do_action( 'activate_' . $plugin, $network_wide )जिसमें से आप चर $network_wideऔर इसकी मूल्य स्थिति देख सकते हैं , trueया तो falseकॉलबैक के तर्क के रूप में या तो हमेशा पास किया जाता है। इसलिए, आपके पास अपने register_activation_hookऔर register_deactivation_hookरैपर में इस तर्क तक पहुंच है । अधिक जानकारी के लिए activate_pluginफ़ंक्शन देखें wp-admin/includes/plugin.php। उम्मीद है की वो मदद करदे।
एडम

1
स्पष्टीकरण की सराहना करें, और आपके उत्तर के लिए फिर से धन्यवाद :)
henrywright

1
@ErenorPaz restore_current_blogको foreachलूप में रखने की आवश्यकता है , क्योंकि यदि आप इसे बाहर रखते हैं, तो उदाहरण के लिए 10 ब्लॉगों पर iterate (स्विच ओवर) करें, restore_current_blogआपके द्वारा स्विच किए गए अंतिम ब्लॉग को पुनर्स्थापित करने के लिए अंतिम कॉल और वर्तमान में आपके द्वारा शुरू किए गए मूल ब्लॉग को नहीं। आपकी मुख्य साइट)। codex.wordpress.org/WPMU_Functions/restore_current_blog
Adam

1
@ErenorPaz को टिप्पणी को हटाने की आवश्यकता नहीं है, ऐसा करने से लोगों के लिए चैट इतिहास भ्रमित हो जाता है। अगर यह सही नहीं भी हो सकता है तो एक राय देने में कुछ भी गलत नहीं है। उसके लिए आपसे कोई घृणा नहीं कर रहा है, हम यहां समुदाय हैं, मदद, चर्चा, सीखने और परिप्रेक्ष्य हासिल करने के लिए। वैसे भी सब अच्छा है ...
एडम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.