Làm cách nào để vô hiệu hóa plugin kích hoạt mạng cho chỉ một trang web?


22

Tôi đang trong quá trình thiết lập một mạng nhiều trang (có khả năng) lớn và tôi đang tìm cách làm cho nó dễ dàng nhất có thể để thêm và định cấu hình trang web khi cần. Tôi hiện đang ở giai đoạn mà tôi đang xử lý các plugin.

Với multisite tôi nhận thức được một số cách khác nhau để bạn có thể kích hoạt plugin

  • Đặt plugin vào /plugins, kích hoạt nó trên mọi trang web một cách vô tình
  • Đặt plugin vào /plugins, sử dụng 'kích hoạt mạng' để kích hoạt nó trên tất cả các trang web
  • Đặt plugin vào /mu-plugins, tự động kích hoạt trên mọi trang web

Bây giờ, tôi đã chơi với các cài đặt và tôi muốn kích hoạt Akismet trên tất cả các trang trừ một hoặc hai. Tôi nghĩ rằng tôi sẽ có thể kích hoạt mạng và sau đó vô hiệu hóa nó trên một trang web, nhưng tôi không thể làm như vậy - nếu tôi sử dụng kích hoạt mạng thì chỉ có tùy chọn 'hủy kích hoạt mạng' - tắt trình cắm này tất cả các trang web.

Có cách nào để có chức năng tiện dụng kích hoạt mạng nhưng vẫn có sự tiện lợi khi có thể tắt các plugin trên cơ sở từng trang web không?

Câu trả lời:


31

Bạn có thể sử dụng bộ lọc site_option_*.

Ví dụ như sau sẽ vô hiệu hóa akismet trên blog với 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 để cung cấp giải pháp cấp độ PHP sạch, giải quyết vấn đề đang được đề cập mà không cần cài đặt plugin bổ sung - bởi vì tôi là một kẻ điên thuần túy và yêu Wordpress càng sạch và càng ít plugin càng tốt! :]
trejder

1
Bỏ mã này vào một tệp PHP mu-pluginsvà hoạt động như một giấc mơ!
bgallagh3r

Tốt để lưu ý rằng điều này sẽ không thực sự làm việc trong một chủ đề. Nó cần được chạy sớm hơn, vì vậy mu-plugins là một nơi tuyệt vời cho nó. Nó có thể chạy như một plugin, nhưng tôi sẽ bắn cho mu-plugin nếu điều đó cũng không hoạt động.
Jake

1
Ngoài ra, bộ lọc này được chạy RẤT NHIỀU, tôi sẽ kiểm tra xem chỉ mục trong mảng có được đặt trước khi bỏ cài đặt không. Sau lần đầu tiên, nó sẽ tiếp tục thử trên một mảng mà vật phẩm đó không tồn tại. if ( isset($value['akismet/akismet.php']) ) { unset($value['akismet/akismet.php']); }
Jake

1
Điều này vẫn hoạt động tốt trên 4.9.4.
Jake

3

Plugin này: http://firestats.cc/wiki/WPMUPluginCommander

bỏ qua các công cụ kích hoạt mạng và làm riêng của nó. và cho phép bạn vô hiệu hóa plugin trên một trang web trên cơ sở trang web.

Cập nhật: Có vẻ như plugin này phá vỡ plugin thẻ sitewide, vì vậy hãy cẩn thận trước khi thử trên mạng sản xuất.


wordpress.org/plugins/plugin-commander - URL đã thay đổi. Mặc dù plugin này đã không được cập nhật trong nhiều năm tại thời điểm này ...
Jake

3

Đây là những gì làm việc cho tôi để vô hiệu hóa một plugin cho một chủ đề cụ thể trên bản cài đặt multisite / multitheme. Tôi đã thêm một vài dòng ở đầu tập tin Hàm.php trong chủ đề của mình:

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

Tôi khá chắc chắn rằng điều này sẽ chỉ hoạt động trên các plugin mu khá hạn chế. Tôi sẽ làm điều này trên initnhư @GDR.
Jake

2

Các plugin hoạt động được lưu trữ trong wp_ [blog_id] _options trong trường 'active_plugins' và 'active_sitewide_plugins' trong wp_ [blog_id] _sitemeta. Đây là các trường được tuần tự hóa, vì vậy đừng chỉnh sửa chúng trừ khi bạn biết bạn đang làm gì.

Ngoài ra hãy xem wp-admin \ plugin.php. Có thể viết một plugin sẽ làm những gì bạn muốn bằng cách sử dụng các hàm được khai báo trong đó, ví dụ: is_plugin_active () và activ_plugin ().

Tuy nhiên, tôi đoán rằng bạn thành thạo PHP có thể không phải là trường hợp.


2

Câu trả lời từ sorich87 và user33465 không hoạt động với tôi với Wordpress 4.3. Thêm phần này vào chức năng của theme.php đã hoạt động:

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

Tôi có thể xác nhận rằng các giải pháp nâng cấp trước đó không còn hoạt động nữa và giải pháp của @gdr thực tế hoạt động.

Tôi có thể xác nhận rằng giải pháp của @ sorich87 hoạt động rất tốt trong 4.4.1. Các bạn không sử dụng nó theo cách hoạt động rõ ràng, nhưng nó vẫn hoạt động. Tuy nhiên, nó có lẽ chỉ có thể hoạt động trong mu-plugin và chắc chắn không có trong chủ đề. Tùy chọn này sẽ làm việc trong các chủ đề. Nhưng lưu ý rằng điều này buộc một plugin bị vô hiệu hóa so với sorich87, chỉ dừng lại buộc nó trên trang web, nhưng vẫn cho phép nó được sử dụng bình thường nếu muốn. Tôi thích cái sau, nhưng cả hai đều có thể hữu ích.
Jake

Thực ra. Phương pháp giải pháp của @ sorich87 không hoạt động nếu trang web của bạn là trang web đầu tiên (ID: 1). Nếu đó là trường hợp, nó sẽ không cho phép bạn Kích hoạt mạng. Bất kỳ ID nào khác xuất hiện để làm việc.
Jake

Và phương pháp này làm điều tương tự cho tôi. Bạn không còn có thể kích hoạt (các) plugin ở chế độ chờ nếu đây là trong chủ đề cho trang web tại ID = 1.
Jake

0

Không nằm ngoài hộp trong WP 3, nhưng tôi nghĩ có thể ghi đè tùy chọn bằng các bộ lọc tùy chọn_ *.

Ngoài ra, sẽ thật tuyệt nếu bạn thêm đề xuất dưới dạng yêu cầu tính năng trong core.trac.wordpress.org.



-1

Tôi đã quản lý để vô hiệu hóa plugin nhưng nó vẫn ở đó trên bảng điều khiển trang web chính. Giải pháp duy nhất tôi tìm thấy để loại bỏ nó hoàn toàn khỏi trang web chính là kiểm tra tệp main.php của plugin và vô hiệu hóa nó theo nó:

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

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.