প্লাগইন মাল্টিসাইটে নেটওয়ার্ক সক্রিয় হওয়ার সময় কীভাবে একটি অ্যাক্টিভেশন ফাংশনটি চালাবেন?


12

আমি আমার প্লাগইন মাল্টিসাইটকে সামঞ্জস্যপূর্ণ করার চেষ্টা করছি। প্লাগইনটি সক্রিয় হওয়ার পরে register_activation_hook()আমি আমার my_activate()ফাংশনটি চালনার জন্য নিবন্ধকরণ করতে ফাংশনটি ব্যবহার করছি । এটি একটি একক সাইট ইনস্টল করতে ভাল কাজ করে।

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

সমস্যাটি হ'ল, my_activate()যখন আমার প্লাগইনটি 'নেটওয়ার্ক সক্রিয়' থাকে তখন প্রতিটি সাইটের জন্য চলবে না run এছাড়াও, যখন নেটওয়ার্কে নতুন সাইট তৈরি করা হয় তখন এটি চলবে না।

আমি কীভাবে আমার অ্যাক্টিভেশন রুটিন ক) ক) চালাতে পারি যখন আমার প্লাগইন নেটওয়ার্কের সমস্ত সাইটের জন্য নেটওয়ার্ক সক্রিয় হয় এবং খ) মাল্টিসাইট নেটওয়ার্কে একটি নতুন সাইট তৈরি করা হয় তখন চালানো যায়?

উত্তর:


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
@ হেনরিয়াইট 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
ব্যাখ্যার প্রশংসা করুন, এবং আপনার উত্তরের জন্য আবার ধন্যবাদ :)
হেনরিউইট

1
@ErenorPaz restore_current_blogকরা প্রয়োজন foreach, লুপ কারণ যদি আপনি এটি বাহিরে করা, তারপর বলছি 10 ব্লগে (ওভার সুইচ) উদাহরণস্বরূপ, গত কলে restore_current_blogগত ব্লগটি আপনার সুইচড এবং মূল আপনি যে ব্লগটি শুরু পুনরুদ্ধার করতে হবে (সম্ভবত আপনার মূল সাইট)। কোডেক্স.ওয়ার্ডপ্রেস.আর্গ
অ্যাডাম

1
@ এরেনোরপাজকে মন্তব্য মুছার দরকার নেই, এটি করার ফলে চ্যাট ইতিহাসকে বিভ্রান্ত করে তোলে। এটি সঠিক না হলেও মতামত জানাতে কোনও ভুল নেই। কেউ এর জন্য আপনার প্রতি ঘৃণা করছে না, আমরা সহায়তা, আলোচনা, শিখতে এবং দৃষ্টিভঙ্গি অর্জনের জন্য এখানে সম্প্রদায়। যাইহোক সব ভাল ...
অ্যাডাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.