WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

deactivate_plugins()WP 2.5.0

Деактивирует указанные плагины. Можно указать параметры деактивации.

Часто используется самими плагинами, когда у плагина появились новые возможности и для их правильной установки нужна повторная активация плагина.

Также, может пригодится, когда нужно автоматически деактивировать плагин во время активации, например, если он не поддерживает текущую версию WP или версию PHP и т.д.

Функцию рекомендуется вызывать во время события admin_init.

Хуки деактивации (типа deactivate_*) не срабатывают во время обновления плагина.

Используйте activate_plugins(), когда нужно активировать плагин.

Работает только в админ-панели, если нужно во фронте, то подключите файл:

require_once ABSPATH .'/wp-admin/includes/plugin.php';

Возвращает

null. Ничего не возвращает.

Использование

deactivate_plugins( $plugins, $silent, $network_wide );
$plugins(строка/массив) (обязательный)

ID плагина или массив из ID.

ID выглядит как путь до файла плагина относительно папки plugins: democracy/democracy.php.

$silent(логический)
Тихая деактивация. true - значит деактивировать плагин без включения событий деактивации (хуков deactivate_*).
По умолчанию: false (хуки деактивации срабатывают)
$network_wide(true/false/null)

Деактивировать ли указанный плагины для сети (при true такеже декативирует плагин, если был активен для сети).

null равносильно true. Значение null (по умолчанию) деактивирует плагины у текущего сайта и для сети.
По умолчанию: null

Примеры

0

#1 Деактивируем указанный плагин

add_action( 'admin_init', 'action_deactivate_plugins' );
function action_deactivate_plugins(){
	deactivate_plugins( 'democracy-poll/democracy.php' );
}
0

#2 Деактивируем плагин при активации, если PHP версия меньше 5.3

register_activation_hook( __FILE__, 'activate' );

function activate() {   
	// Проверим версию PHP. Нужна 5.3+
	if ( version_compare(PHP_VERSION, '5.3', '<') ) {
		//deactivate_plugins( plugin_basename( __FILE__ ) ); // это не обязательно

		// обрываем работу с выводом сообщения.
		wp_die( 'Плагину требуется PHP 5.3 или выше.' );
	}

	// Активируем...
}

Список изменений

С версии 2.5.0 Введена.

Код deactivate_plugins() WP 6.5.2

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 );

		if ( ! $silent ) {
			/**
			 * Fires before a plugin is deactivated.
			 *
			 * If a plugin is silently deactivated (such as during an update),
			 * this hook does not fire.
			 *
			 * @since 2.9.0
			 *
			 * @param string $plugin               Path to the plugin file relative to the plugins directory.
			 * @param bool   $network_deactivating Whether the plugin is deactivated for all sites in the network
			 *                                     or just the current site. Multisite only. Default false.
			 */
			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 ) {
			/**
			 * Fires as a specific plugin is being deactivated.
			 *
			 * This hook is the "deactivation" hook used internally by register_deactivation_hook().
			 * The dynamic portion of the hook name, `$plugin`, refers to the plugin basename.
			 *
			 * If a plugin is silently deactivated (such as during an update), this hook does not fire.
			 *
			 * @since 2.0.0
			 *
			 * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network
			 *                                   or just the current site. Multisite only. Default false.
			 */
			do_action( "deactivate_{$plugin}", $network_deactivating );

			/**
			 * Fires after a plugin is deactivated.
			 *
			 * If a plugin is silently deactivated (such as during an update),
			 * this hook does not fire.
			 *
			 * @since 2.9.0
			 *
			 * @param string $plugin               Path to the plugin file relative to the plugins directory.
			 * @param bool   $network_deactivating Whether the plugin is deactivated for all sites in the network
			 *                                     or just the current site. Multisite only. Default false.
			 */
			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 );
	}
}
1 комментарий
    Войти