Одне з перших, що WordPress робить для завантаження плагінів - це отримати активні плагіни як збережені в базі даних:
$active_plugins = (array) get_option( 'active_plugins', array() );
Оскільки він використовує, get_option()
ми можемо використовувати option_active_plugins
фільтр для зміни списку активних плагінів на льоту.
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' );
Просто замініть gravityforms/gravityforms.php
каталог та ім’я файлу плагіна, який ви хочете відключити.
Проблема тут полягає в тому, що ми намагаємось вплинути на завантаження плагінів, тому не можемо це зробити зсередини плагіна, оскільки це занадто пізно. У темі теж було б пізно.
На щастя, WordPress має "Потрібно використовувати плагіни". Це плагіни, які ви можете додати, завантажені до та окремо до звичайних плагінів, і не відображаються у списку звичайних плагінів.
Все, що вам потрібно зробити, щоб додати цей код у плагін Must Use - це створити wp-content/mu-plugins
каталог (якщо він ще не існує) та створити файл PHP (його можна назвати чим завгодно) з цим кодом у ньому. Вам не потрібен заголовок плагіна або щось інше.
Тепер цей код буде завантажений перед усіма іншими плагінами, коли WordPress завантажується. Оскільки наш фільтр встановлений, коли WordPress отримає список активних плагінів для завантаження плагіна, який ви хочете відключити, він буде відфільтрований із цього списку, якщо WP-CLI активний.
get_option()
, повертається рано, коли значення зберігається в перехідних / подібних, і цей фільтр пропускається? (Працює не в більшості випадків, лише на екрані плагіна адміністратора він фактично виконується)