Отключение Плагинов в WordPress
Функция deactivate_plugins() позволяет отключать один или несколько плагинов в WordPress. Это может быть полезно, если необходимо временно убрать функционал плагина.
Основные Настройки Функции
deactivate_plugins( $plugins, $silent, $network_wide );
Параметры
- $plugins (string|array) (обязательный) — Название плагина или список плагинов, которые нужно отключить.
- $silent (bool) (опциональный) — Если
true, то деактивационные хуки не будут вызываться. По умолчанию:false. - $network_wide (bool|null) (опциональный) — Если
true, плагин будет отключён для всех сайтов в сети (для мультисайтовой установки). Еслиnull, то отключение произойдёт как для текущего сайта, так и для сети. По умолчанию:null.
Примеры Использования
Пример 1: Отключение Конкретного Плагина
add_action( 'admin_init', 'action_deactivate_plugins' );
function action_deactivate_plugins() {
deactivate_plugins( 'democracy-poll/democracy.php' );
}
Этот код отключает плагин democracy-poll при загрузке админ-панели.
Пример 2: Отключение Плагина при Активации, Если Версия PHP Меньше 5.3
register_activation_hook( __FILE__, 'activate' );
function activate() {
// Проверяем, какая версия PHP используется.
if ( version_compare(PHP_VERSION, '5.3', '<') ) {
// Отключение плагина (опционально).
deactivate_plugins( plugin_basename( __FILE__ ) );
// Завершаем выполнение.
wp_die( 'Плагин требует PHP версии 5.3 или выше.' );
}
// Код активации...
}
Здесь мы проверяем версию PHP и если она ниже 5.3, то отключаем плагин и выводим сообщение об ошибке.
Внутренние Механизмы Функции
Когда функция deactivate_plugins() вызывается, она проходит по списку плагинов и отключает каждый из них. Если параметр $silent установлен в true, деактивационные хуки не вызываются.
Структура Функции
function deactivate_plugins( $plugins, $silent = false, $network_wide = null ) {
// Проверка, если это мультисайтовая установка.
if ( is_multisite() ) {
$network_current = get_site_option( 'active_sitewide_plugins', array() );
}
$current = get_option( 'active_plugins', array() );
$do_blog = false;
$do_network = false;
foreach ( (array) $plugins as $plugin ) {
$plugin = plugin_basename( trim( $plugin ) );
if ( ! is_plugin_active( $plugin ) ) {
continue;
}
$network_deactivating = ( false !== $network_wide ) && is_plugin_active_for_network( $plugin );
// Если не в режиме silent, вызываем хуки.
if ( ! $silent ) {
do_action( 'deactivate_plugin', $plugin, $network_deactivating );
}
if ( false !== $network_wide ) {
if ( is_plugin_active_for_network( $plugin ) ) {
$do_network = true;
unset( $network_current[ $plugin ] );
} elseif ( $network_wide ) {
continue;
}
}
if ( true !== $network_wide ) {
$key = array_search( $plugin, $current, true );
if ( false !== $key ) {
$do_blog = true;
unset( $current[ $key ] );
}
}
if ( $do_blog && wp_is_recovery_mode() ) {
list( $extension ) = explode( '/', $plugin );
wp_paused_plugins()->delete( $extension );
}
if ( ! $silent ) {
do_action( "deactivate_{$plugin}", $network_deactivating );
do_action( 'deactivated_plugin', $plugin, $network_deactivating );
}
}
if ( $do_blog ) {
update_option( 'active_plugins', $current );
}
if ( $do_network ) {
update_site_option( 'active_sitewide_plugins', $network_current );
}
}
Заключение
Функция deactivate_plugins() — мощный инструмент для управления плагинами в WordPress. Используйте её с осторожностью и всегда проверяйте, отключён ли плагин перед выполнением кода, зависящего от его работы.