Видалення плагіна
Якщо ваш плагін записує будь-які дані куди завгодно: в опції, базу даних, файли і т.д., то при повному видаленні плагіна логічно видалити всі дані, які відносяться тільки до нього, щоб вони не лежали мертвим вантажем.
Процес видалення плагіна запускається, коли користувач відключив плагін, а потім натиснув посилання «Видалити» в адмін-панелі на сторінці плагінів.
Недосвідчені розробники іноді роблять помилку, використовуючи хук деактивації плагіна видалення його даних звідусіль. Це неправильно – при деактивації повинні видалятися (очищатися) тільки тимчасові дані, а всі дані – лише при видаленні плагіна.
Виглядає це приблизно так:
Сценарій | деактивація | видалення |
---|---|---|
Видалення опцій з таблиці wp_options | ні | так |
Очищення кешу | так | ні |
Крім того, зверніть увагу, що коли плагін видаляється, хук деактивації вже спрацював. Активний плагін завжди спочатку деактивується і тільки потім видаляється – неможливо видалити плагін, якщо він активний.
Як відбувається видалення?
Перед видаленням плагіна (посилання “видалити” на сторінці плагінів) WordPress виконує деякі дії, завдяки яким можна видалити всі сліди перебування плагіна на сайті. Переваги використання такого підходу в тому, що не потрібно піклуватися про попередження користувачів про видалення слідів плагіна перед видаленням плагіна. Це свого роду API видалення плагінів – WordPress робить частину роботи за вас.
Два способи деінсталяції плагінів
Розробниками WordPress передбачено два варіанти повністю видалити плагін:
Створити файл uninstall.php у кореневій директорії плагіна.
- Використовувати функцію register_uninstall_hook() – спрацьовує під час видалення плагіна.
Спосіб 1: файл uninstall.php
Якщо під час видалення плагіна WordPress знайде файл uninstall.php у його папці, буде виконано код цього файла. Важливо: у цьому випадку хук деактивації працювати не буде!
Важливим моментом є обов’язкове використання перевірки константи WP_UNINSTALL_PLUGIN
у цьому файлі. Потрібно це для безпеки, щоб неможливо було звернутися до цього файлу безпосередньо.
Файли плагіна будуть видалені після того, як спрацює код файлу uninstall.php .
ВАЖЛИВО! На момент спрацювання файлу uninstall.php ніякий код не запускається! Жодні його файли (крім uninstall.php) не підключаються! Тому будь-які підключення файлів, класів, визначення констант потрібно робити окремо.
У цьому файлі потрібно розмістити код, який видалить все, що пов’язано з плагіном: опції, таблиці БД, довільні поля і т.д.
Цей процес необоротний!
Константа WP_UNINSTALL_PLUGIN визначається WordPress в момент видалення плагіна і не буде визначена, якщо звернутися безпосередньо до файлу uninstall.php .
Також, константа WP_UNINSTALL_PLUGIN не буде визначена при використанні техніки видалення плагіна через хук, вона визначається лише після того, як було знайдено файл uninstall.php у папці плагіна.
Приклад файлу uninstall.php:
<?php /** * ВАЖЛИВО! Жодні файли плагіна тут не підключаються! * * Тут доступні лише базові функції WordPress. * * Якщо потрібні якісь функції або класи плагіна для видалення, * Підключіть файли та ініціалізуйте потрібні класи окремо. */ defined( 'WP_UNINSTALL_PLUGIN' ) || exit; // Перевірка пройдена успішно. // Видаляємо опції та інше. delete_option( 'my_option');
Дебаг при видаленні плагіна
Щоб перевірити як працює видалення, але при цьому не видаляти файли плагіна просто додайте в кінці файлу uninstall.php обрив скрипту через die() . Також можна виводити будь-які дані, наприклад, через print_r() або ще якось.
Щоб побачити результат дебагу, коли видалення плагіна запущено через AJAX, відкрийте панель розробника Chrome (вкладка «мережа»). Там при запуску AJAX можна побачити запит та переглянути його результат.
Спосіб 2: функція register_uninstall_hook()
Метод зі створенням файлу uninstall.php кращий, ніж цей метод.
Функція register_deactivation_hook() .
Коли плагін видаляється і в його каталозі немає файлу uninstall.php , але в основному файлі плагіна прописана функція видалення register_uninstall_hook() , буде ця функція видалення плагіна.
При використанні register_uninstall_hook() всі дії та коди плагіна повинні знаходитись усередині функцій та підключатися через хуки, тобто. ніякі дії плагіна не повинні бути відкрито у файлах плагіна, тому що інакше в процесі видалення плагіна вони теж будуть спрацьовувати і можуть заважати процесу видалення.
Не рекомендується використовувати цей метод, тому що він потребує чіткого розуміння його роботи. І навіть у цьому випадку все одно можна легко помилитись. Але якщо для вашого плагіна підходить тільки такий варіант видалення, то дотримуйтесь наступних правил:
- Не можна запускати (ініціалізувати) код плагіна безпосередньо у файлі – робіть це через хук plugins_loaded чи пізніше.
- Краще використовувати файл видалення unistall.php .
Приклад коду деінсталяції плагіна через хук:
register_uninstall_hook( __FILE__, 'my_uninstall_hook' ); function my_uninstall_hook(){ delete_option('my_option'); }
Цей код повинен бути в головному файлі плагіна, саме на нього дивиться __FILE__ . Якщо з якихось причин register_uninstall_hook() потрібно помістити в інший файл плагіна, то в першому параметрі (замість __FILE__) потрібно вказати шлях до головного файлу плагіна.