Это бывает нужно для предотвращения ошибок, когда например:
- версия установленного на сайте WordPress не поддерживается,
- не поддерживается текущая версия PHP на сервере,
- на блоге найден конфликтующий плагин.
deactivate_plugins( $plugins, $silent = false, $network_wide = null ) |
- $plugins
- (строка|массив) укажите один плагин в виде строки или несколько плагинов в виде массива. Указывать нужно путь к плагину относительно директории
plugins
, напримерwp-polls/wp-polls.php
. - $silent
- (логическое) Предотвратить выполнение хуков. По умолчанию
false
— хуки выполняются. Бываетtrue
, когда например плагин выключается и включаются во время обновления. - $network_wide
- Может принимать значения
false
,true
иnull
(по умолчанию — деактивируем плагин для всех сайтов сети).
Функцию рекомендуется использовать внутри хука admin_init
.
Пример 1. Деактивируем плагин в случае, когда текущая версия WordPress не поддерживается
В данном примере код будет относиться именно к текущему плагину. Код вставляем в главный файл плагина.
// допустим, что минимальная версия WordPress должна быть 2.8 if ( version_compare( floatval( get_bloginfo( 'version' ) ), '2.8', '<' ) ) { // если меньше 2.8 // деактивируем add_action( 'admin_init', 'true_plugin_off' ); function true_plugin_off() { deactivate_plugins( plugin_basename( __FILE__ ) ); } // добавляем соответствующее уведомление add_action( 'admin_notices', 'true_plugin_uvedomlenie' ); function true_plugin_uvedomlenie() { echo '<div class="updated">Плагин <p><strong>{название плагина}</strong> был отключен, так как не поддерживается версией WordPress ниже 2.8.</p></div>'; // также сносим параметр из URL, чтобы не выполнилось ничего лишнего if ( isset( $_GET['activate'] ) ) unset( $_GET['activate'] ); } } else { // тут будет находиться весь остальной код плагина } |
Пример 2. Отключаем плагин непосредственно из кода темы или из другого плагина.
Деактивировать плагин через тему очень просто, для этого вам нужно лишь правильно указать путь к главному исполняемому файлу плагина относительно папки plugins
.
Код для functions.php
:
add_action( 'admin_init', 'true_plugin_off_in_theme' ); function true_plugin_off_in_theme() { deactivate_plugins( 'true-instagram-widget/true-instagram-widget.php' ); } |
Этот же код подойдёт, если мы отключаем один плагин через код другого.
Хуки функции
Всего в функции три хука и все они будут задействованы, если параметр $silent
не установлен в значение true
.
В самом начале, ещё перед тем, как плагин(ы) деактивирован запускается:
do_action( 'deactivate_plugin', $plugin, $network_deactivating ); |
После же деактивации запускаются сразу два:
do_action( 'deactivate_' . $plugin, $network_deactivating ); do_action( 'deactivated_plugin', $plugin, $network_deactivating ); |
Пара слов про параметры:
- $plugin
- По сути то же самое, что и параметр функции
$plugins
, но только для одного плагина, не бывает массивом. - $network_deactivating
- Аналог параметра
$network_wide
, единственное отличие, что сюда также включена проверка на то, активирован ли плагин для сети или нет.
Обратите внимание, что все эти хуки задействованы внутри цикла для каждого из плагинов (это если параметр $plugins
— массив).
Источник: misha.blog