Отключение Плагинов в WordPress: Как использовать функцию deactivate_plugins()

Отключение Плагинов в 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. Используйте её с осторожностью и всегда проверяйте, отключён ли плагин перед выполнением кода, зависящего от его работы.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *