Tôi muốn hủy kích hoạt một plugin cho một người dùng cụ thể. Tôi đang sử dụng đoạn mã sau trong wp-content/plugin-mu
tệp plugin:
add_filter( 'option_active_plugins', 'bo_disable_apm_plugin' );
function bo_disable_apm_plugin( $plugins ) {
global $current_user;
// Not use advanced page manager for media manager
if ( is_admin() && in_array( 'media_manager', $current_user->roles ) ) {
$key = array_search( 'advanced-page-manager/advanced_page_manager.php' , $plugins );
if ( false !== $key ) {
unset( $plugins[$key] );
}
}
return $plugins;
}
Tất nhiên, nó không hoạt động. Tôi không hiểu đường đi option_active_plugins
. Bằng cách kết xuất dữ liệu, tôi tìm ra mã được thực thi 7 lần.
Ở vòng lặp đầu tiên, người dùng không biết, vì vậy điều kiện không được đáp ứng. Các plugin vẫn được kích hoạt.
Tôi đã thêm một mã phức tạp hơn với ba điều kiện: bỏ đặt plugin nếu người dùng không được đặt, do đó, plugin bị bất hoạt mỗi lần trên vòng lặp đầu tiên. NẾU người dùng được đặt (các vòng tiếp theo), hãy kiểm tra anh ta để đặt / hủy cài đặt plugin cho phù hợp. Cũng không làm việc.
Tôi đã không quản lý để tìm đúng công thức, vì vậy có lẽ tôi đã sai ở đâu đó và nó không thể được thực hiện. Mỗi lần, plugin được kích hoạt hoặc hủy kích hoạt cho tất cả người dùng. Có vẻ như lần lặp đầu tiên là lần lặp lại.
Có cách nào để hủy kích hoạt plugin cho người dùng / nhóm cụ thể không?
require_once
) vì vậy ngay cả khi các cuộc gọi sau đó, plugin được lọc ra khỏi các tùy chọn, tệp plugin đã được yêu cầu và không tồn tại cách để loại bỏ nó. Vì vậy, có, lần đầu tiên là duy nhất tính. Vấn đề là trong đăng nhập người dùng WordPress được xử lý khá sau khi các plugin được tải và đây là lý do tại sao mã của bạn bị lỗi. Bạn có 2 tùy chọn: buộc người dùng đăng nhập sớm hơn; hoặc loại bỏ các tính năng bổ sung plugin, tức là tôi đoán plugin thêm một số hook, đợi cho đến khiwp_loaded
gỡ bỏ tất cả chúng. Plugin sẽ hoạt động nhưng "tắt tiếng".