วิธีการปิดการใช้งานปลั๊กอินที่เปิดใช้งานเครือข่ายสำหรับเว็บไซต์เดียว?


22

ฉันอยู่ในขั้นตอนการตั้งค่าเครือข่ายขนาดใหญ่หลายแห่ง (ที่อาจเกิดขึ้น) และฉันกำลังมองหาที่จะทำให้มันง่ายที่สุดในตอนนี้เพื่อเพิ่มและกำหนดค่าไซต์เมื่อจำเป็น ขณะนี้ฉันอยู่ในช่วงที่ฉันจัดการกับปลั๊กอิน

ด้วย Multisite ฉันทราบวิธีการต่าง ๆ ที่คุณสามารถเปิดใช้งานปลั๊กอินได้

  • ใส่ปลั๊กอินเข้าไป/pluginsเปิดใช้งานในทุกไซต์โดยไม่ได้ตั้งใจ
  • ใส่ปลั๊กอิน/pluginsใช้ 'เครือข่ายเปิดใช้งาน' เพื่อเปิดใช้งานในทุกไซต์
  • ใส่ปลั๊กอินเข้าไป/mu-pluginsโดยอัตโนมัติทุกไซต์

ตอนนี้ฉันได้เล่นกับการตั้งค่าและฉันต้องการเปิดใช้งาน Akismet ในทุกไซต์ยกเว้นหนึ่งหรือสอง ฉันคิดว่าฉันจะสามารถเปิดใช้งานปลั๊กอินเครือข่ายแล้วปิดการใช้งานในเว็บไซต์เดียว แต่ฉันไม่สามารถทำได้ - ถ้าฉันใช้เครือข่ายเปิดใช้งานมีเพียงตัวเลือกที่จะ 'ปิดการใช้งานเครือข่าย' - ซึ่งปิดการใช้งานปลั๊กอิน เว็บไซต์ทั้งหมด

มีวิธีที่จะมีฟังก์ชั่นที่ใช้งานง่ายของการเปิดใช้งานเครือข่าย แต่ยังคงมีความสะดวกสบายในการปิดใช้งานปลั๊กอินในแต่ละไซต์หรือไม่?

คำตอบ:


31

site_option_*คุณสามารถใช้ตัวกรอง

เช่นข้อมูลต่อไปนี้จะปิดใช้งาน akismet บนบล็อกที่มี id 2

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 ระดับที่สะอาดซึ่งแก้ปัญหาได้โดยไม่จำเป็นต้องติดตั้งปลั๊กอินเสริม - เพราะฉันเป็นคนบ้าและรัก Wordpress ที่สะอาดและสะอาดน้อยที่สุด! :]
trejder

1
วางรหัสนี้ในไฟล์ PHP mu-pluginsและทำงานเหมือนฝัน!
bgallagh3r

ดีที่จะต้องทราบว่าสิ่งนี้จะไม่ทำงานในชุดรูปแบบจริงๆ มันจะต้องวิ่งเร็วขึ้นดังนั้น mu-plugins จึงเป็นสถานที่ที่ดีสำหรับมัน มันอาจทำงานเป็นปลั๊กอิน แต่ฉันจะยิงเพื่อ mu-plugins ถ้ามันไม่ทำงานเช่นกัน
Jake

1
นอกจากนี้ตัวกรองนี้ทำงานเป็นจำนวนมากฉันจะตรวจสอบว่าดัชนีในอาร์เรย์ถูกตั้งค่าไว้ก่อนที่จะยกเลิกการตั้งค่าหรือไม่ หลังจากครั้งแรกมันจะพยายามหาอาร์เรย์ที่ไม่มีรายการนั้นอยู่ if ( isset($value['akismet/akismet.php']) ) { unset($value['akismet/akismet.php']); }
Jake

1
ยังคงใช้งานได้ดีใน 4.9.4
Jake

3

ปลั๊กอินนี้: http://firestats.cc/wiki/WPMUPluginCommander

ข้ามสิ่งที่เปิดใช้งานเครือข่ายและทำเอง และช่วยให้คุณปิดการใช้งานปลั๊กอินในเว็บไซต์ตามเว็บไซต์

อัปเดต: ดูเหมือนว่าปลั๊กอินนี้แบ่งปลั๊กอินแท็กทั่วทั้งไซต์ดังนั้นควรระมัดระวังก่อนที่จะลองใช้เครือข่ายที่ใช้งานจริง


wordpress.org/plugins/plugin-commander - เปลี่ยน URL แล้ว แม้ว่าปลั๊กอินนี้ยังไม่ได้รับการปรับปรุงในปีที่ผ่านมาที่จุดนี้ ...
เจค

3

นี่คือสิ่งที่ทำงานสำหรับฉันที่จะปิดการใช้งานปลั๊กอินสำหรับหนึ่งรูปแบบเฉพาะในการติดตั้ง multisite / multitheme ฉันเพิ่มสองสามบรรทัดเหล่านี้ที่ด้านบนของไฟล์ 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' );

ฉันค่อนข้างแน่ใจว่ามันจะทำงานเฉพาะใน mu-plugins ซึ่งค่อนข้าง จำกัด ฉันจะทำเช่นนี้กับinit@GDR
Jake

2

ปลั๊กอินที่ใช้งานจะถูกเก็บไว้ใน wp_ [blog_id] _options ในฟิลด์ 'active_plugins' และ 'active_sitewide_plugins' ใน wp_ [blog_id] _sitemeta เขตข้อมูลเหล่านี้เป็นแบบอนุกรมดังนั้นอย่าแก้ไขมันจนกว่าคุณจะรู้ว่ากำลังทำอะไรอยู่

ดูที่ wp-admin \ plugin.php ด้วย มันควรจะเป็นไปได้ที่จะเขียนปลั๊กอินที่จะทำสิ่งที่คุณต้องการโดยใช้ฟังก์ชั่นที่ประกาศในนั้นเช่น is_plugin_active () และ activ_plugin ()

อย่างไรก็ตามฉันคิดว่าคุณมีความเชี่ยวชาญใน PHP ซึ่งอาจไม่เป็นเช่นนั้น


2

คำตอบจาก sorich87 และ user33465 ใช้ไม่ได้กับ Wordpress 4.3 การเพิ่มสิ่งนี้ไปยังฟังก์ชั่นของ theme.php ทำงาน:

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' );

ฉันสามารถยืนยันได้ว่าโซลูชัน upvoted ก่อนหน้านี้ไม่ทำงานอีกต่อไปและโซลูชันโดย @gdr ทำงานได้จริง

ฉันสามารถยืนยันได้ว่าโซลูชันของ @ sorich87 ใช้งานได้ดีใน 4.4.1 พวกคุณไม่ได้ใช้มันในแบบที่เห็นได้ชัด แต่ก็ยังใช้งานได้ อย่างไรก็ตามมันอาจทำงานได้ใน mu-plugins เท่านั้นและไม่ได้อยู่ในธีม ตัวเลือกนี้จะทำงานในรูปแบบ แต่โปรดทราบว่าสิ่งนี้บังคับให้ปลั๊กอินปิดใช้งาน vs sorich87 ซึ่งเพิ่งหยุดบังคับให้ใช้บนไซต์ แต่ก็ยังอนุญาตให้ใช้งานได้ตามปกติหากต้องการ ฉันชอบอันหลัง แต่พวกเขาทั้งคู่อาจมีประโยชน์
Jake

แท้จริง วิธีการแก้ปัญหาของ @ sorich87 ไม่ทำงานหากเว็บไซต์ของคุณเป็นเว็บไซต์แรก (ID: 1) หากเป็นกรณีนี้จะไม่อนุญาตให้คุณเปิดใช้งานเครือข่ายปลั๊กอิน รหัสอื่นใดที่ใช้งานได้
เจค

และวิธีนี้ก็ทำสิ่งเดียวกันสำหรับฉัน คุณไม่สามารถเปิดใช้งานปลั๊กอินได้อีกต่อไปหากสิ่งนี้อยู่ในชุดรูปแบบสำหรับไซต์ที่ ID = 1
Jake

0

ฉันไม่ได้ออกจากกล่องใน WP 3 แต่ฉันคิดว่าเป็นไปได้ที่จะแทนที่ตัวเลือกโดยใช้ตัวเลือก option_ *

นอกจากนี้มันจะหวานถ้าคุณเพิ่มข้อเสนอแนะเป็นคำขอคุณลักษณะใน core.trac.wordpress.org


0

วิธีที่ดีกว่าในการจัดการปลั๊กอินทั้งหมดในเครือข่าย Multisite คือ "ผู้บัญชาการปลั๊กอิน" คุณสามารถค้นหาได้ที่นี่: 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();

}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.