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
(логічний/null)

Чи деактивувати зазначений плагіни для всіх сайтів мережі (MU збирання).

Значення 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.0.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.
			 *
			 * Якщо plugin is silently deactivated (such as during an update),
			 * this hook does not fire.
			 *
			 * @ Since 2.9.0
			 *
			 * @param string $plugin Оцінка файлу електронної пошти relative to plugins directory.
			 * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network
			 * або just the current site. Multisite тільки. 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 aspecific plugin is being deactivated.
			 *
			 * Цей шпилька є "деактивація" шлунок, використовуваний міжнародно з register_deactivation_hook().
			 * The dynamickа порція з hook name, `$plugin`, refers to the plugin basename.
			 *
			 * Якщо plugin є стрімко деактивованим (такий, як під час оновлення), цей звук не постраждає.
			 *
			 * @ Since 2.0.0
			 *
			 * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network
			 * або just the current site. Multisite тільки. Default false.
			 */
			do_action( "deactivate_{$plugin}", $network_deactivating );

			/**
			 * Fires after a plugin is deactivated.
			 *
			 * Якщо plugin is silently deactivated (such as during an update),
			 * this hook does not fire.
			 *
			 * @ Since 2.9.0
			 *
			 * @param string $plugin Оцінка файлу електронної пошти relative to plugins directory.
			 * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network
			 * або just the current site. Multisite тільки. 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);
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *