Это бывает нужно для предотвращения ошибок, когда например:
deactivate_plugins( $plugins, $silent = false, $network_wide = null )
plugins
, например wp-polls/wp-polls.php
.false
— хуки выполняются. Бывает true
, когда например плагин выключается и включаются во время обновления.false
, true
и null
(по умолчанию — деактивируем плагин для всех сайтов сети).Функцию рекомендуется использовать внутри хука admin_init
.
В данном примере код будет относиться именно к текущему плагину. Код вставляем в главный файл плагина.
// допустим, что минимальная версия 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 { // тут будет находиться весь остальной код плагина }
Деактивировать плагин через тему очень просто, для этого вам нужно лишь правильно указать путь к главному исполняемому файлу плагина относительно папки 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 );
Пара слов про параметры:
$plugins
, но только для одного плагина, не бывает массивом.$network_wide
, единственное отличие, что сюда также включена проверка на то, активирован ли плагин для сети или нет.Обратите внимание, что все эти хуки задействованы внутри цикла для каждого из плагинов (это если параметр $plugins
— массив).
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.