WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru WPmentor - Ищем топовых специалистов по WordPress, чтобы помочь вам заработать

Активация/деактивация плагина

Хуки для активации и деактивации плагина WordPress обеспечивают выполнение PHP действий, когда плагин активируется или деактивируется, а также есть хук для удаления плагина, но он немного отличается от текущих и о нем поговорим в другом разделе.

При активации как правило нужно запустить процедуру установки плагина, чтобы, например:

  • добавить опции (настройки) по умолчанию
  • установить таблицы базы данных
  • добавить правила ЧПУ
  • создать директории
  • и т.д.

При деактивации обычно очищают временные данные:

  • кеш во временных опциях
  • файлы во временных каталогах. Например, плагин страничного кэширования WP Super Cache при дезактивации удаляет все созданные файлы кэша.

Хук деактивации иногда путают с хуком деинсталляции (удаления), однако это совсем разные хуки, они работают по-разному и сфера их применения тоже разная. При удалении обычно удаляются все данные плагина, включая опции, таблицы в БД и т.д. О деинсталляции все данные удаляются, процедура включения хука другая о ней мы еще поговорим...

Чтобы вызвать PHP функцию при активации, используйте register_activation_hook() в основном файле плагина:

register_activation_hook( __FILE__, 'myplugin_activation' );

Чтобы вызвать PHP функцию при деактивации используйте register_deactivation_hook(), также в основном файле плагина:

register_deactivation_hook( __FILE__, 'myplugin_function_to_run' );

Первый параметр в каждой функции - это путь к основному файлу плагина - это файл с заголовками плагина.

Как правило, эти функции вызываются в основном файле плагина. Если функции помещаются в другой файл, то необходимо изменить первый параметр, указав в нем путь до основного файла плагина. Это можно сделать предварительно сохранив путь, например, в константу.

Как работает активация

Плагин активируется функцией activate_plugin(), в которой срабатывает хук activate_(plugin).

Функция activate_plugin() в ядре вызывается уже после загрузки среды ВП. Эта функция подключает главный файл плагина (и все что в нем указано), а затем через хук активирует указанную callback-функцию. За счет этого в нашей callback-функции доступны все функции и классы плагина. Но, так как все основные хуки WP уже сработали во время загрузки среды ВП, то никакие события плагина повешенные на хуки, например plugins_loaded, уже не сработают при подключении главного файла плагина. А значит наш плагин будет подключен, но не полностью: не так как он должен подключаться, когда уже активирован.

Так, например, если плагин делает что-либо во время события plugins_loaded, то все эти действия просто не произойдут при активации плагина. Например, если он подключает файл перевода, то файл перевода не будет подключен в момент срабатывания callback-функции указанной для register_activation_hook().

Как правило, после срабатывания callback-функции есть 2 события на которые можно повесить функции: activated_plugin и shutdown.

Чтобы сделать что-то неординарное при активации плагина, смотрите пример 5.

Пример активации плагина

Одним из распространенных случаев для хука активации - это обновление настроек ЧПУ WordPress с помощью flush_rewrite_rules(), когда плагин регистрирует произвольный тип записи. Это позволяет избавиться от неприятных ошибок 404. Давайте посмотрим на примере:

add_action( 'init', 'myplugin_setup_post_type' );
function myplugin_setup_post_type(){
	// Регистрируем тип записи "book"
	register_post_type('book', array(
		'public' => 'true'
	) );
}

register_activation_hook( __FILE__, 'myplugin_install' ); 
function myplugin_install(){
	// Запускаем функцию регистрации типа записи
	myplugin_setup_post_types();

	// Сбрасываем настройки ЧПУ, чтобы они пересоздались с новыми данными
	flush_rewrite_rules();
}

Если вы не знакомы с регистрацией произвольных типов записей, то прочитайте описание функции register_post_type().

Пример деактивации плагина

Теперь при деактивации нам нужно опять сбросить правила ЧПУ, потому что при деактивации наш тип записи будет удален. Т.е. это обратный процесс тому, что был выше при активации:

register_deactivation_hook( __FILE__, 'myplugin_deactivation' );
function myplugin_deactivation() {
	// Тип записи не регистрируется, а значит он автоматически удаляется - его не нужно удалять как-то еще.

	// Сбрасываем настройки ЧПУ, чтобы они пересоздались с новыми данными
	flush_rewrite_rules();
}

-

Больше примеров, как правильно использовать функции активации/деактивации смотрите в описании этих функций:

Функция удаления плагина

Кроме активации и деактивации, важным моментом является удаление плагина. Подключится к этому процессу можно через функцию

Подробнее о том как правильно удалять плагины читайте в специальной статье.

Eugene Kopich 100eugenekopich.com
Web Design • Landing Pages • JavaScript
Редакторы: Kama 7680
1 коммент
  • Добрый день. Подскажите, пожалуйста, как можно сделать отложенный запуск плагина? Дело в том, что мне сначала нужно дождаться загрузки классов темы, а потом активировать плагин.

    2
    Ответить27.Ноя.2018 в 12:34 #