Первое, что 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()
, возвращается рано, когда значение сохраняется в переходных / аналогичных и этот фильтр пропущен? (Не работает в большинстве случаев, только на экране плагина администратора он действительно был выполнен)