Một trong những điều đầu tiên WordPress làm để tải plugin là lấy các plugin đang hoạt động như được lưu trong cơ sở dữ liệu:
$active_plugins = (array) get_option( 'active_plugins', array() );
Vì nó sử dụng nên get_option()
chúng tôi có thể sử dụng option_active_plugins
bộ lọc để sửa đổi danh sách các plugin đang hoạt động.
function wpse_301282_disable_plugin( $active_plugins ) {
if ( defined( 'WP_CLI' ) && WP_CLI ) {
$key = array_search( 'gravityforms/gravityforms.php', $active_plugins );
if ( $key ) {
unset( $active_plugins[$key] );
}
}
return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );
Chỉ cần thay thế gravityforms/gravityforms.php
bằng thư mục và tên tệp của plugin bạn muốn tắt.
Vấn đề ở đây là chúng tôi đang cố gắng ảnh hưởng đến việc tải plugin, vì vậy chúng tôi không thể làm điều đó từ bên trong một plugin, vì đã quá muộn. Trong chủ đề cũng sẽ là quá muộn.
Rất may, WordPress có "Phải sử dụng plugin", đây là những plugin bạn có thể thêm được tải trước đó và riêng biệt với các plugin thông thường và không xuất hiện trong danh sách plugin thông thường.
Tất cả những gì bạn cần làm để thêm mã này vào Plugin Phải sử dụng là tạo một wp-content/mu-plugins
thư mục (nếu nó chưa tồn tại) và tạo một tệp PHP (nó có thể được gọi là bất cứ thứ gì) với mã đó trong đó. Bạn không cần một tiêu đề plugin hoặc bất cứ điều gì khác.
Bây giờ mã đó sẽ được tải trước tất cả các plugin khác khi WordPress tải. Vì bộ lọc của chúng tôi đã sẵn sàng, khi WordPress có danh sách các plugin đang hoạt động để tải plugin bạn muốn tắt sẽ bị lọc khỏi danh sách đó nếu WP-CLI hoạt động.
get_option()
quay lại sớm khi giá trị được lưu trong quá độ / tương tự và bộ lọc này bị bỏ qua? (Không hoạt động trong hầu hết các trường hợp, chỉ trong màn hình plugin quản trị viên mới thực sự được thực thi)