केवल एक साइट के लिए नेटवर्क सक्षम प्लगइन को कैसे निष्क्रिय करें?


22

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

मल्टीसाइट के साथ मुझे कई अलग-अलग तरीकों के बारे में पता है जिनसे आप प्लगइन्स को सक्रिय कर सकते हैं

  • प्लगइन रखो /plugins, इसे हर साइट पर अदृश्य रूप से सक्रिय करें
  • प्लग इन करें /plugins, सभी साइटों पर इसे सक्रिय करने के लिए 'नेटवर्क सक्रिय' का उपयोग करें
  • प्लगइन रखो /mu-plugins, स्वचालित रूप से हर साइट पर सक्रिय

अब, मैं सेटिंग्स के साथ खेल रहा हूं और मैं सभी साइटों पर एक या दो को सक्रिय करना चाहता हूं । मैंने सोचा था कि मैं नेटवर्क को सक्रिय करने के लिए प्लगइन को सक्रिय करूंगा और फिर इसे किसी एक साइट पर अक्षम कर दूंगा, लेकिन मैं ऐसा करने में असमर्थ हूं - अगर मैं नेटवर्क सक्रियण का उपयोग करता हूं तो केवल 'नेटवर्क निष्क्रिय' करने का विकल्प है - जो प्लगइन को निष्क्रिय कर देता है सभी साइटें।

क्या नेटवर्क सक्रिय करने की आसान कार्यक्षमता है लेकिन अभी भी साइट-दर-साइट आधार पर प्लगइन्स को निष्क्रिय करने में सक्षम होने की सुविधा है?

जवाबों:


31

आप फ़िल्टर का उपयोग कर सकते हैं site_option_*

उदाहरण के लिए, निम्नलिखित id 2 के साथ ब्लॉग पर akismet को निष्क्रिय कर देगा।

add_filter('site_option_active_sitewide_plugins', 'modify_sitewide_plugins');

function modify_sitewide_plugins($value) {
    global $current_blog;

    if( $current_blog->blog_id == 2 ) {
        unset($value['akismet/akismet.php']);
    }

    return $value;
}

1
स्वच्छ प्रदान करने के लिए +1, PHP- स्तर का समाधान जो अतिरिक्त प्लग इन स्थापित करने की आवश्यकता के बिना प्रश्न में समस्या हल करता है - क्योंकि मैं एक शुद्धतावादी पागल हूँ और जितना संभव हो उतना साफ और कम प्लगइन के रूप में वर्डप्रेस! :]
trejder

1
एक PHP फ़ाइल में इस कोड को गिरा दिया mu-pluginsऔर एक सपने की तरह काम करता है!
bgallagh3r

ध्यान दें कि यह वास्तव में एक विषय में काम नहीं करेगा। इसे जल्द चलाने की आवश्यकता है, इसलिए म्यू-प्लग इसके लिए एक शानदार जगह है। यह एक प्लगइन के रूप में चल सकता है, लेकिन अगर यह या तो काम नहीं करता है तो मैं म्यू-प्लगइन्स के लिए शूट करूंगा।
जेक

1
इसके अलावा, यह फ़िल्टर एक बहुत चलता है, मैं जाँचता हूँ कि क्या सरणी में सूचकांक इसे सेट करने से पहले सेट किया जाएगा। पहली बार के बाद, यह एक एरे पर कोशिश करता रहेगा जहां वह आइटम मौजूद नहीं है। if ( isset($value['akismet/akismet.php']) ) { unset($value['akismet/akismet.php']); }
जेक

1
यह अभी भी 4.9.4 पर बहुत अच्छा काम कर रहा है।
जेक

3

यह प्लगइन: http://firestats.cc/wiki/WPMUPluginCommander

नेटवर्क सक्रियण सामान को दरकिनार करता है और अपने आप करता है। और आपको साइट के आधार पर प्लगइन को साइट के आधार पर अक्षम करने देता है।

अपडेट: ऐसा लगता है कि यह प्लगइन साइटवाइड टैग प्लग इन को तोड़ देता है, इसलिए उत्पादन नेटवर्क पर प्रयास करने से पहले सावधान रहें।


wordpress.org/plugins/plugin-commander - URL बदल गया। हालांकि इस बिंदु पर वर्षों में इस प्लगइन को अपडेट नहीं किया गया है ...
जेक

3

यहाँ एक मल्टीसिट / मल्टीटैम इंस्टॉल पर एक विशेष थीम के लिए एक प्लगइन को अक्षम करने के लिए मेरे लिए क्या काम किया गया है। मैंने अपनी थीम में functions.php फ़ाइल के शीर्ष पर इन कुछ पंक्तियों को जोड़ा:

/**
 * Disable fancybox plugin for this theme, it breaks javascript
 */
function deactivate_plugin_conditional() {
    if ( is_plugin_active('fancybox-for-wordpress/fancybox.php') ) {
        deactivate_plugins('fancybox-for-wordpress/fancybox.php');
    }
}
add_action( 'muplugins_loaded', 'deactivate_plugin_conditional' );

मुझे पूरा यकीन है कि यह केवल म्यू-प्लगइन्स पर काम करेगा जो बहुत सीमित है। मैं init@GDR की तरह यह करूँगा।
जेक

2

सक्रिय प्लगइन्स को wp_ [blog_id] _ फ़ील्ड में 'active_plugins' और 'active_sitewide_plugins' में wp_ [blog_id] _sitemeta में संग्रहीत किया जाता है। ये क्रमबद्ध फ़ील्ड हैं इसलिए इन्हें संपादित न करें जब तक कि आपको पता न हो कि आप क्या कर रहे हैं।

Wp-admin \ plugin.php पर भी नज़र डालें। एक प्लगइन लिखना संभव होगा जो आप वहां घोषित कार्यों का उपयोग करना चाहते हैं, जैसे कि is_plugin_active () और activate_plugin ()।

हालाँकि, मैं आपको बता रहा हूँ कि आप PHP में कुशल हैं जो कि ऐसा नहीं हो सकता।


2

Sorich87 और user33465 के उत्तर मेरे लिए वर्डप्रेस 4.3 के साथ काम नहीं करते थे। इसे विषय के कार्यों में जोड़ना।

function deactivate_plugin_conditional() {
    $deactivated_plugin_name = 'lazy-load/lazy-load.php';
    deactivate_plugins($deactivated_plugin_name, false, true);
}
add_action( 'init', 'deactivate_plugin_conditional' );

मैं इस बात की पुष्टि कर सकता हूं कि पहले किए गए समाधान अब काम नहीं करते हैं और @gdr द्वारा समाधान वास्तव में काम करता है।

मैं पुष्टि कर सकता हूं कि @ sorich87 का समाधान 4.4.1 में बहुत अच्छा काम करता है। आप लोग इसे इस तरह से उपयोग नहीं कर रहे हैं जो स्पष्ट रूप से काम करता है, लेकिन यह अभी भी काम करता है। हालांकि, यह शायद केवल म्यू-प्लग में काम कर सकता है और निश्चित रूप से थीम में नहीं। यह विकल्प थीम में काम करेगा। लेकिन ध्यान दें कि यह एक प्लगइन को निष्क्रिय करता है जो कि sorich87 बनाम को निष्क्रिय करता है, जो इसे साइट पर जबरन बंद कर देता है, लेकिन फिर भी इसे वांछित रूप से उपयोग करने की अनुमति देता है। मैं बाद को पसंद करता हूं, लेकिन वे दोनों उपयोगी हो सकते हैं।
जेक

वास्तव में। यदि आपकी साइट पहली साइट (ID: 1) है, तो sorich87 की समाधान विधि काम नहीं करती है। यदि ऐसा है, तो यह आपको प्लगइन को नेटवर्क सक्रिय करने की अनुमति नहीं देगा। कोई भी अन्य आईडी काम करती दिखाई देती है।
जेक

और यह तरीका मेरे लिए वही काम करता है। अगर आप आईडी = 1. साइट पर थीम के लिए प्लगइन को सक्रिय नहीं कर सकते हैं तो यह आईडी = 1.
जेक

0

WP 3 में बॉक्स से बाहर नहीं है, लेकिन यह संभव होगा, मुझे लगता है, विकल्प_ * फिल्टर का उपयोग करके विकल्प को ओवरराइड करना।

इसके अलावा, अगर आप इस सुझाव को core.trac.wordpress.org में एक सुविधा अनुरोध के रूप में जोड़ते हैं, तो यह मीठा होगा।


0

मल्टीसिट नेटवर्क में सभी प्लगइन्स को संभालने का बेहतर तरीका है "प्लगइन कमांडर" जो आप यहां पा सकते हैं: http://wordpress.org/extend/plugins/plugin-commander/


-1

मैं प्लगइन को अक्षम करने में कामयाब रहा, लेकिन यह अभी भी मुख्य साइट पैनल पर था। एकमात्र उपाय जो मुझे मुख्य साइट से पूरी तरह से हटाने के लिए मिला था, वह यह था कि साइट के प्लगइन के main.php पर जाँच करें और इसे उसके अनुसार अक्षम करें:

global $current_blog;

// Only available to B
if( $current_blog->blog_id == 2 ) {


    define( 'AB_PATH', __DIR__ );

    include_once 'includes.php';

    //  plugin loaded stuff

    AB_Plugin::registerHooks();

    is_admin() ? new AB_Backend() : new AB_Frontend();

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.