В WordPress, хуки активации и деактивации используются для запуска каких-либо действий во время активации или деактивации плагина.
- Во время активации плагины могут запускать правила отображения красивых ссылок, создать собственные таблицы в базе или создать стандартные опции и дать им значения по умолчанию
- Во время деактивации плагины могут удалить временные данные, такие как кеш, файлы и директории
Хук деактивации иногда путают с хуком удаления. Хук удаления используется для полного удаления всей информации о плагине, например, снести опции, таблицы и прочее. Во время деактивации, есть шанс, что пользователь захочет снова активировать плагин, поэтому нет смысла удалять всю информацию сразу.
Активация
Используйте функцию register_activation_hook(), чтобы установить хук активации:
register_activation_hook( __FILE__, 'pluginprefix_function_to_run' );
Деактивация
Используйте функцию register_deactivation_hook(), чтобы установить хук деактивации:
register_deactivation_hook( __FILE__, 'pluginprefix_function_to_run' );
В двух примерах выше:
- первый параметр функции означает, что вы хотите применить это к текущему файлу, в вашем случае к плагину
- второй параметр — это функция, которая будет выполнять нужную вам логику. Например,
pluginprefix_function_to_run
вызовет функциюpluginprefix_function_to_run()
.
Пример
Один из часто используемых примеров хуков — это обновить постоянные ссылки, которые создают новые форматы постов. Это помогает избавиться от надоедливой 404 ошибки.
Давайте теперь посмотрим на рабочий пример:
function pluginprefix_setup_post_type() { // регистрируем новый формат поста: "book" (книга) register_post_type( 'book', ['public' => 'true'] ); } add_action( 'init', 'pluginprefix_setup_post_type' ); function pluginprefix_install() { // вызываем нашу функцию, которая регистрирует собственный формат постов pluginprefix_setup_post_type(); // чистим постоянные ссылки, после того как тип поста уже был зарегистрирован flush_rewrite_rules(); } register_activation_hook( __FILE__, 'pluginprefix_install' );
Если вы еще не знакомы с регистрацией типов постов, не волнуйтесь — мы рассмотрим это чуть позже. Этот пример был использован лишь из-за того, что многие сталкиваются с такой проблемой.
Используя пример выше, давайте напишем функцию деактивировации:
function pluginprefix_deactivation() { // удалить зарегистрируемый тип поста unregister_post_type( 'book' ); // удалить тип поста из постоянных ссылок в базе flush_rewrite_rules(); } register_deactivation_hook( __FILE__, 'pluginprefix_deactivation' );
Для дальнейшего чтения информации о хуках активации/деактивации читайте register_activation_hook() и register_deactivation_hook().