WordPress: хуки активации и деактивации

· WordPress, Основы и Разработка плагинов · 2 мин чтения

В 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().