WordPress как на ладони
wordpress jino

deactivate_plugins() WP 2.5.0

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

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

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

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

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

Чтобы активировать плагин используйте activate_plugins()

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

require_once ABSPATH .'/wp-admin/includes/plugin.php';
Хуки из функции:
Возвращает

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

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

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

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

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

Примеры

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

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

#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 или выше.' );
	}

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

Код deactivate plugins: wp-admin/includes/plugin.php WP 4.8.2

<?php
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 = $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 main plugin file from 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 is 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 );
			if ( false !== $key ) {
				$do_blog = true;
				unset( $current[ $key ] );
			}
		}

		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 is 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 main plugin file from 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 );
}

Cвязанные функции

Из метки: plugin (плагин)

Еще из раздела: Плагины, хуки

deactivate_plugins Комментариев нет

Здравствуйте, !

Ваш комментарий