প্লাগইন নেটওয়ার্ক সক্রিয়করণ প্রতিরোধ


9

আমার একটি প্লাগইন রয়েছে যা বর্তমানে নেটওয়ার্ক অ্যাক্টিভেশন সমর্থন করে না। অবশ্যই এটির জন্য সর্বোত্তম ফিক্স হ'ল এটি ঠিক করা :) যা করার আমি পরিকল্পনা করি। তবে আমি অবাক হই যে এরই মধ্যে নেটওয়ার্ক অ্যাক্টিভেশন রোধ করতে আমি যদি কোনও অস্থায়ী সমাধান ব্যবহার করতে পারি তবে সম্ভবত এর মতো একটি ওয়ার্কফ্লো:

  1. অ্যাক্টিভেশনটি নেটওয়ার্ক-প্রশস্ত কিনা তা সনাক্ত করুন (কিভাবে ??)
  2. বার্তাটি প্রদর্শন করুন যা এটি বর্তমানে সমর্থিত নয়, এবং আমি দুর্গন্ধযুক্ত, আমি দুঃখিত
  3. অ্যাক্টিভেশন বাধা নিষ্ক্রিয়

অথবা, অন্যান্য পরামর্শ গৃহীত হয়েছে। ধন্যবাদ।

স্পষ্টতার জন্য: মাল্টিসাইট অ্যাক্টিভেশন ঠিক আছে, কেবল নেটওয়ার্ক-প্রশস্ত অ্যাক্টিভেশন নয়।

উত্তর:


5

এখানে উত্তরগুলি অত্যধিক চিন্তাভাবনা এবং খুব জটিল। অ্যাক্টিভেশন প্রতিরোধের পরিবর্তে প্লাগইন নিষ্ক্রিয় কেন? অ্যাক্টিভেশন করার পরে ডাই ('এখানে আপনার ত্রুটির বার্তা)' বলে কল্পনা করার মতো সহজ কিছু কাজটি করবে।

function activate($networkwide) {
    if (is_multisite() && $networkwide) 
       die('This plugin can\'t be activated networkwide');
}

register_activation_hook('your-plugin/index.php','activate');

তারপরে আপনি যখন প্যানেলে সক্রিয় করার চেষ্টা করবেন তখন আপনার ত্রুটি বার্তা সহ পৃষ্ঠার শীর্ষে একটি দুর্দান্ত ত্রুটি পাবেন।


6

একটি প্লাগইন শিরোনাম Network: falseওয়ার্ডপ্রেস দ্বারা উপেক্ষা করা হবে ... দুর্ভাগ্যক্রমে। তবে অ্যাক্টিভেশন হুক একটি প্যারামিটার পায় $network_wideএবং আমরা এটি অ্যাক্টিভেশন চলাকালীন প্লাগইন নিষ্ক্রিয় করতে ব্যবহার করতে পারি:

<?php
/**
 * Plugin Name: Prevent Network Activation
 * Plugin URI:  http://wordpress.stackexchange.com/questions/76145/prevent-network-activation-of-plugin
 * Network:     false
 *
 * Note the 'Network' option will be ignored by WordPress.
 */

register_activation_hook( __FILE__, 'pna_check_network_activation' );

function pna_check_network_activation( $network_wide )
{
    if ( ! $network_wide )
        return;

    deactivate_plugins( plugin_basename( __FILE__ ), TRUE, TRUE );

    header( 'Location: ' . network_admin_url( 'plugins.php?deactivate=true' ) );
    exit;
}

এটি দরকারী, তবে আমাকে কী ঘটছে তা ব্যাখ্যা করতে দেয় না (অন্তত বর্তমানে উপস্থাপিত হিসাবে)। আমি কেবল wp_dieসেখানে andোকাতে এবং পুনঃনির্দেশটি এড়িয়ে যেতে পারি, তবে এটি ব্যাখ্যা ব্যতীত নিষ্ক্রিয় করার চেয়ে একটু কমই কঠিন বলে মনে হচ্ছে। :)
ডেভিস

1
এটিই সমাধানটি আমি শেষ করে শেষ করেছিলাম - নিষ্ক্রিয় ইউআরএলকে পুনর্নির্দেশ না করে বার্তাটি প্রেরণ করতে আমি এই ফাংশনটিকে "মরা" হিসাবে সামঞ্জস্য করেছি। এটি সবচেয়ে পরিষ্কার নয়, তবে এটি সমস্ত প্রয়োজনীয়তা পূরণ করে এবং অন্যান্য অংশের চেয়ে কম ওভারহেড রাখে, আমার পক্ষ থেকে একটি অস্থায়ী প্যাচ জন্য।
k3davis

4

আপনি এটি সহজেই নেটওয়ার্ক-প্লাগইন তালিকা থেকে আড়াল করতে পারেন।

add_filter( 'all_plugins', 'wpse_76145_hide_network_plugin' );
function wpse_76145_hide_network_plugin( $all )
{
    global $current_screen;

    if( $current_screen->is_network )
        unset($all['akismet/akismet.php']);

    return $all;
}

এবং এককালীন নেটওয়ার্ক অ্যাডমিন বিজ্ঞপ্তি প্রদর্শন করুন। প্রশ্নোত্তর সাথে অভিযোজিত অ্যাড_রোল () একবার চালানো হবে?

add_action( 'network_admin_notices', 'wpse_76145_admin_notice' );

function wpse_76145_admin_notice()
{ 
    global $current_screen;
    if( 'plugins-network' == $current_screen->id )
    {
        if ( wpse_25643_run_once( 'hide_akismet_network' ) )
            echo '<div class="error">Akismet not available in Network mode</div>';
    }
}

function wpse_25643_run_once( $key )
{
    $test_case = get_option( 'run_once' );

    if ( isset( $test_case[$key] ) && $test_case[$key] )
    {
        return false;
    }
    else
    {
        $test_case[$key] = true;
        update_option( 'run_once',$test_case );
        return true;
    }
}

বা এই অন্যান্য কৌশলটি ব্যবহার করুন : প্রথমে প্রশাসক অঞ্চলে লগইন করার পরে ব্যবহারকারীদের একটি বিজ্ঞপ্তি যুক্ত করুন


2

(এটি পরীক্ষা করা হয়নি)

add_action( 'activated_plugin', 'wpse76145_no_network_activation',10,2 );
function wpse76145_no_network_activation( $plugin, $network_wide){

   if( $plugin == 'myplugin/myplugin.php' && $network_wide ){
       //Plugin was network activated

       //Network deactivate
       deactivate_plugins( $plugin,false, true );

       //Activate on single site
       activate_plugins( $plugin);

       add_option('wpse76145_network_activate_notice',1);
   }

}

এবং তারপরে বিকল্পটি এবং প্রদর্শন বিজ্ঞপ্তির admin_noticesজন্য চেক করুন wpse76145_network_activate_notice

দ্রষ্টব্য: 'মাইপ্লুগিন / মাইপলুগিন.এফপি' হার্ডকোড না করাই ভাল হবে - আমি মনে করি এটির পরিবর্তে plugin_basename(__FILE__);কাজ হবে (এবং পছন্দসই হবে)।

যদি একাধিক-সাইট অ্যাক্টিভেশন ঠিক থাকে তবে সম্পাদনা করুন , তবে আপনি switch_to_blog()পৃথকভাবে প্রতিটি প্লাগ-ইন সক্রিয় করতে ব্যবহার করতে পারেন । ব্যবহারকারী এখনও যা বলেছে তা না করায় আমি এখনও একটি নোটিশ প্রদর্শন করব।


এটি কাজ করতে পারে তবে আমি বুঝতে পারি না যে প্লাগইন ইতিমধ্যে নিষ্ক্রিয় থাকলে অ্যাডমিন নোটিশ কীভাবে ডাকতে চলেছে? বা এটি কি একক সাইট অ্যাক্টিভেশন যা এটি ঘটতে দেয়?
ডিভিস

হ্যাঁ, আপনি কেবলমাত্র মূল সাইটটিতে প্লাগইনটি সক্রিয় করেন।
স্টিফেন হ্যারিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.