Vô hiệu hóa hành động plugin / plugin thông qua chủ đề


19

Tôi đã cài đặt plugin Google Phân tích trên trang web của mình. Tôi cũng đang sử dụng plugin MobilePress để phục vụ một chủ đề được thiết kế cho các trình duyệt di động không thông minh trên điện thoại. Tôi đã thiết lập Google Analytics cho thiết bị di động để sử dụng trong chủ đề này và muốn tắt plugin Trình phân tích vì nó bao gồm một cuộc gọi đến tệp js lớn hơn.

Có ai biết nếu có thể vô hiệu hóa một plugin bằng hàm.php hoặc một số phương pháp khác không?

Tôi tin rằng tôi đã tìm được mã bổ sung các chức năng cho trang, vì vậy nếu không thể vô hiệu hóa toàn bộ plugin thì có thể dừng các hành động để thực thi không? Tôi đã cố gắng vô hiệu hóa chúng trực tiếp mà không có may mắn. Đây là mã từ tệp plugin:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

Tôi đã cố gắng loại bỏ những hành động đó với:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

Bất kỳ trợ giúp nào cũng được đánh giá rất cao.


Đối với tôi điều này nên hoạt động về mặt kỹ thuật, vì vậy có một số điều về thời gian chạy mã này của bạn bị sai (quá sớm hoặc quá muộn). Vui lòng cung cấp thêm thông tin.
Rarst

Vâng, tôi nghĩ rằng nó sẽ làm việc như là tốt. Tôi không có quá nhiều kinh nghiệm với các hành động thêm / xóa vì vậy tôi không chắc chắn làm thế nào để gỡ lỗi thêm. Mặc dù câu trả lời của EAMann có hiệu quả, bạn đang tìm kiếm thêm thông tin gì?
PNMG

Tôi hơi bối rối - không phải việc tắt plugin thông qua các phương tiện thông thường sẽ dễ dàng hơn sao? Mà câu trả lời của EAMann chỉ bằng mã. Tôi giả sử bạn muốn nó bị vô hiệu hóa một cách linh hoạt trong một số điều kiện ...
Rarst

Tôi có một chủ đề thông thường được đặt trong wordpress cho bất kỳ trình duyệt máy tính để bàn bình thường nào. Đối với chủ đề này, tôi muốn sử dụng plugin GA. Plugin Mobilepress sử dụng php để lấy chuỗi tác nhân người dùng và cung cấp một chủ đề khác cho điện thoại thông minh hoặc điện thoại không thông minh. Tôi muốn sử dụng tệp tin.php cho chủ đề không phải điện thoại thông minh để vô hiệu hóa plugin GA không đưa JS vào <head> cho chủ đề đó. Nó vẫn cần được kích hoạt cho hai chủ đề khác (máy tính để bàn & điện thoại thông minh). Điều đó có giúp làm rõ không?
PNMG

Vâng, đó là những gì tôi nghĩ. Nhưng việc hủy kích hoạt sẽ chỉ vô hiệu hóa plugin liên tục và nó sẽ tắt cho đến khi được kích hoạt rõ ràng. Tôi không thấy nó phù hợp với trường hợp sử dụng của bạn.
Rarst

Câu trả lời:


25

Khi WordPress kích hoạt một plugin, nó gọi activate_plugin()hàm. Chức năng này kích hoạt plugin trong hộp cát và chuyển hướng đến một nơi khác thành công. Nó được sử dụng bởi một vài tác giả để lập trình kích hoạt phụ thuộc plugin.

Có một chức năng khác deactivate_plugin(), đó là một điều tương tự ngược lại ... đó thực sự là cách WordPress hủy kích hoạt các plugin khi bạn nhấp vào "hủy kích hoạt" hoặc "vô hiệu hóa".

Để hủy kích hoạt một plugin đã cài đặt, chỉ cần gọi:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

Hoặc, để hủy kích hoạt nhiều plugin cùng một lúc:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

Có một tham số thứ hai (đầu tiên là một chuỗi hoặc một chuỗi các plugin để vô hiệu hóa) cho phép bạn vô hiệu hóa các plugin mà không cần gọi các móc vô hiệu hóa. Theo mặc định, nó được đặt thành false và tôi khuyên bạn nên để nó như vậy. Trừ khi vì một số lý do mà bạn muốn bỏ qua việc hủy kích hoạt, thì bạn sẽ làm:

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

Điều này sẽ tắt plugin, nhưng nó sẽ không kích hoạt bất cứ thứ gì mà plugin đã đăng ký thực hiện khi hủy kích hoạt. Vì vậy, nếu plugin loại bỏ các tùy chọn hoặc bảng db khi nó bị vô hiệu hóa, bạn muốn thực hiện việc hủy kích hoạt "im lặng" này để giữ thông tin đó và sử dụng nó ở nơi khác.


Câu trả lời tuyệt vời - và không chỉ so với câu trả lời khác, giả sử, câu trả lời thiếu "đây là một trang web" có thể ở đâu đó gần đó.
biên tập viên

Mã này, được đặt trong hàm.php sẽ hủy kích hoạt plugin trong quản trị viên do đó vô hiệu hóa nó khỏi hai chủ đề khác. Cảm ơn bạn Rarst cho điểm mà ra. Tôi chỉ muốn vô hiệu hóa nó cho một chủ đề nơi chứa tệp tin.php.
PNMG

Bạn chỉ từng sử dụng một chủ đề tại một thời điểm trên một trang web nhất định ... nhưng nếu bạn muốn kích hoạt lại plugin sau khi tắt chủ đề, điều đó cũng có thể.
EAMann

11

Điều này là nhờ câu trả lời tuyệt vời của EAMann ở trên và tôi nghĩ rằng nó cũng có thể hữu ích cho poster gốc ...

Tôi cần một giải pháp để đảm bảo người dùng tắt plugin của tôi nếu họ tải lên phiên bản cao cấp (để tránh xung đột tiềm ẩn). Trước đây tôi đã phát hiện trạng thái của nó với is_plugin_active và hiển thị thông báo lỗi quản trị để nhắc người dùng tắt nó. Điều này RẤT NHIỀU ...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

Lưu ý: Có vẻ như không hoạt động trên register_activation_hook, nhưng admin_init hoạt động như một bùa mê.


1
Chỉ cần lưu ý rằng tôi khá chắc chắn is_plugin_active đã được kiểm tra trong hook deac activate_plugins vì vậy không cần phải làm lại
Bryan Willis

1

Đây là giải pháp của tôi, hãy tạo một plugin có thể vô hiệu hóa các plugin khác như vậy:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

Đẩy cái này vào sản xuất, kích hoạt nó, sau đó đưa cơ sở dữ liệu xuống máy dev cục bộ của bạn.

Nguồn

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.