Функция deactivate_plugins()
позволяет программно деактивировать один или несколько плагинов WordPress. Она особенно полезна для автоматического управления состоянием плагинов, например, в случае несовместимости с текущей средой или при необходимости удовлетворить определенные условия для работы плагина.
deactivate_plugins( string|string[] $plugins, bool $silent = false, bool|null $network_wide = null )
Описание параметров
- $plugins (строка или массив, обязательный): ID плагина или массив ID для деактивации. ID указывается как путь относительно папки
plugins
, например,'my-plugin/my-plugin.php'
. - $silent (логический, необязательный): Указывает, следует ли пропускать хуки деактивации. По умолчанию
false
(хуки срабатывают). - $network_wide (логический или null, необязательный): Указывает, деактивировать ли плагин для всех сайтов в сети (используется в многосайтовой установке WordPress). Значение
null
деактивирует плагин для сети и текущего сайта. По умолчаниюnull
.
Пример 1: Деактивация одного плагина
Этот пример демонстрирует простую деактивацию плагина my-plugin
без дополнительных параметров:
add_action( 'admin_init', 'deactivate_my_plugin' );
function deactivate_my_plugin() {
deactivate_plugins( 'my-plugin/my-plugin.php' );
}
Пример 2: Тихая деактивация плагина
Чтобы деактивировать плагин без вызова событий деактивации, установите параметр $silent
в true
:
deactivate_plugins( 'another-plugin/another-plugin.php', true );
Пример 3: Деактивация плагина для всей сети сайтов
Если нужно отключить плагин для всех сайтов в сети (Multisite), используйте параметр $network_wide
со значением true
:
deactivate_plugins( 'network-plugin/network-plugin.php', false, true );
Пример 4: Проверка версии PHP перед активацией и деактивация, если версия ниже минимальной
Иногда нужно проверять соответствие окружения требованиям плагина. Например, проверим версию PHP и деактивируем плагин, если она ниже 7.0:
register_activation_hook( __FILE__, 'check_php_version' );
function check_php_version() {
if ( version_compare( PHP_VERSION, '7.0', '<' ) ) {
deactivate_plugins( plugin_basename( __FILE__ ) );
wp_die( 'Для работы плагина требуется версия PHP 7.0 или выше.' );
}
}
Пример 5: Автоматическая деактивация при отсутствии зависимости
Допустим, наш плагин my-awesome-plugin
зависит от другого плагина required-plugin
. Если последний деактивирован, наш плагин автоматически отключится:
add_action( 'admin_init', 'check_plugin_dependency' );
function check_plugin_dependency() {
if ( !is_plugin_active( 'required-plugin/required-plugin.php' ) && is_plugin_active( 'my-awesome-plugin/my-awesome-plugin.php' ) ) {
deactivate_plugins( 'my-awesome-plugin/my-awesome-plugin.php' );
wp_die( 'Для работы плагина My Awesome Plugin требуется активный Required Plugin. Плагин был деактивирован.' );
}
}
Полезные советы
- Используйте
deactivate_plugins()
для управления зависимостями: Это помогает поддерживать корректную работу плагинов в условиях различных требований. - Настройка для сети сайтов: При разработке плагина для сети сайтов учитывайте поведение при активации и деактивации на всех сайтах сразу.
- Пропуск хуков деактивации: При обновлении плагина можно пропустить хуки, установив
$silent
вtrue
, чтобы предотвратить выполнение тяжелых задач во время деактивации.
Заключение
Функция deactivate_plugins()
помогает избежать проблем с несовместимостью и позволяет легко управлять активностью плагинов, улучшая удобство администрирования в WordPress