Як правильно видаляти (деінсталювати) плагін в wordpress

Якщо ваш плагін записує будь-які дані куди завгодно: в опції, базу даних, файли і т.д. то при повному видаленні плагіна, логічно видалити і всі дані які відносяться тільки до нього, щоб вони не лежали мертвим вантажем.

Процес видалення плагіна запускається, коли користувач відключив плагін, а потім натиснув на посилання «Видалити» в адмін-панелі на сторінці плагінів.

Недосвідчені розробники іноді роблять помилку, використовуючи хук деактивації плагіна для видалення його даних звідусіль. Це неправильно - при деактивації повинні віддалятися (очищатися) тільки тимчасові дані, а всі дані тільки при видаленні плагіна.

Виглядає це приблизно так:

Видалення опцій з таблиці wp_options

Крім того зверніть увагу, що коли плагін віддаляється, хук деактивації вже спрацював. Тобто Активний плагін завжди спочатку деактивує і тільки потім віддаляється - неможливо видалити плагін, якщо він активний.

Як відбувається видалення?

Два способи деінсталяції плагінів

Розробниками WordPress передбачено два варіанти повністю видалити плагін:

Створити файл uninstall.php в кореневій директорії плагіна.

  • Використовувати функцію register_uninstall_hook () - спрацьовує під час видалення плагіна.
  • Спосіб 1: файл uninstall.php

    Цей метод більш кращий, в порівнянні з другим.

    Якщо під час видалення плагіна WordPress знайде файл uninstall.php в його папці, то буде виконаний код цього файлу, при цьому хук деактивації працювати вже не буде.

    Важливим моментом є обов'язкове використання перевірки константи WP_UNINSTALL_PLUGIN в цьому файлі. Потрібно це для забезпечення безпеки, щоб неможливо було звернутися до цього файлу безпосередньо.

    Файли плагіна будуть видалені після того, як спрацює код файлу uninstall.php. У момент спрацьовування файлу uninstall.php ніякої код плагіна ще не запущений і ніякі його файли не підключені, тому будь-які підключення класів, визначення констант потрібно робити окремо.

    У цьому файлі потрібно розмістити код, який видалить все що пов'язано з плагіном: опції, таблиці БД, довільні поля і т.д.

    Цей процес є незворотнім!

    Константа WP_UNINSTALL_PLUGIN визначається WordPress в момент видалення плагіна і не буде визначена, якщо звернутися до файлу uninstall.php безпосередньо.

    Також, константа WP_UNINSTALL_PLUGIN не буде визначено, при використанні техніки видалення плагіна через хук, вона визначається тільки після того як був знайдений файл uninstall.php в папці плагіна.

    Як повинен виглядати uninstall.php:

    Дебаг при видаленні плагіна

    Щоб перевірити як працює видалення, але при цьому не видаляти файли плагіна, просто додайте в кінці файлу uninstall.php обрив скрипта через die (). Також можна виводити будь-які дані, наприклад, через print_r () або якось ще.

    Щоб побачити результат дебага, коли видалення плагіна запущено через AJAX, відкрийте панель розробника в Chrome (вкладка «мережу»). Там під час запуску AJAX, можна побачити запит і подивитися його результат.

    Спосіб 2: функція register_uninstall_hook ()

    Коли плагін віддаляється і в його каталозі немає файлу uninstall.php. але в основному файлі плагіна прописана функція видалення register_uninstall_hook (). буде викликано цю функцію видалення плагіна.

    При використанні register_uninstall_hook (). всі дії і коди плагіна повинні знаходитися всередині функцій і підключатися через хукі, тобто ніякі дії плагіна не повинні знаходитися відкрито в файлах плагіна, тому що інакше в процесі видалення плагіна, вони теж будуть спрацьовувати і можуть заважати процесу видалення.

    Не рекомендується використовувати цей метод, тому що він вимагає чіткого розуміння його роботи. І навіть в цьому випадку все одно можна легко помилитися. Але якщо для вашого плагіна підходить тільки такий варіант видалення, то дотримуйтесь наступних правил:

    • Не можна запускати (ініціалізацію) код плагіна безпосередньо в файлі - робіть це через хук plugins_loaded або пізніше.
    • Краще використовувати файл видалення unistall.php.

    Приклад коду деінсталяції плагіна через хук:

    Цей код повинен знаходиться в головному файлі плагіна, саме на нього дивимося __FILE__. Якщо з якихось причин register_uninstall_hook () потрібно помістити в інший файл плагіна, то в першому параметрі (замість __FILE__), потрібно вказати шлях до головного файлу плагіна.

    Схожі статті