Регистрация хуков деинсталляции плагина в WordPress

Регистрация хуков деинсталляции плагина в WordPress

Функция register_uninstall_hook() была введена в WordPress версии 2.7.0. Она позволяет установить хук для деинсталляции плагина, который будет вызван, когда пользователь нажимает на ссылку деинсталляции плагина.

Что такое хук деинсталляции?

Хук деинсталляции — это специальный механизм, который позволяет выполнять определенный код, когда плагин удаляется. Этот код может очищать настройки или удалять данные, связанные с вашим плагином. Однако этот хук не будет активен, если плагин не зарегистрирует его.

Важно:

  • Не выполняйте произвольный код вне функций при регистрации хука деинсталляции.
  • Если вам нужно выполнить код при удалении плагина, создайте файл uninstall.php в каталоге плагина.

Как использовать хук деинсталляции?

Синтаксис

register_uninstall_hook( $file, $callback );
  • $file (string, обязательный) — файл плагина.
  • $callback (callable, обязательный) — функция, которая будет выполнена, когда хук активируется. Это должна быть статическая функция или метод.

Пример регистрации хука деинсталляции

Простой пример:

// Регистрируем хук активации
register_activation_hook( __FILE__, 'your_plugin_activate' );

function your_plugin_activate() {
    register_uninstall_hook( __FILE__, 'wm_ya_db_uninstall' );
}

function wm_ya_db_uninstall() {
    delete_option("option_name");
}

// Остальной код плагина
add_action( 'init', 'plugin_function' );

function plugin_function() {
    // Код вашей функции плагина
}

Рекомендации

  • Рекомендуется регистрировать хук удаления только один раз при активации плагина. Это оптимизирует выполнение запросов к базе данных и улучшает производительность сайта.
  • Если функция, привязанная к хуку, изменила свое имя, необходимо снова зарегистрировать хук, чтобы обновить значение обратного вызова.

Пример для ООП

Если ваш плагин основан на объектно-ориентированном программировании, вот как зарегистрировать хук деинсталляции для класса:

register_activation_hook( __FILE__, 'your_plugin_activate' );

function your_plugin_activate() {
    register_uninstall_hook( __FILE__, array( 'Demo_Class', 'uninstall' ) );
}

class Demo_Class {

    public static function uninstall() {
        if ( ! current_user_can( 'activate_plugins' ) ) {
            return;
        }

        check_admin_referer( 'bulk-plugins' );

        // Важно: проверьте, является ли это файлом, 
        // который был зарегистрирован в момент удаления плагина.
        if ( plugin_basename(__FILE__) !== WP_UNINSTALL_PLUGIN )
            return;

        // Ваш код для деинсталляции
    }

    public function __construct() {
        // Код для регистрации хуков
    }
}

Использование файла uninstall.php

Вместо использования функции register_uninstall_hook() гораздо проще создать файл uninstall.php. Вот пример его содержимого:

// Если файл доступа напрямую, закрываем доступ
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

$option_name = 'plugin_option_name';

// Для обычного сайта.
if ( !is_multisite() ) {
    delete_option( $option_name );
} 
// Для многосайтовой установки.
else {
    global $wpdb;

    $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
    $original_blog_id = get_current_blog_id();

    foreach ( $blog_ids as $blog_id ) {
        switch_to_blog( $blog_id );
        delete_site_option( $option_name );  
    }

    switch_to_blog( $original_blog_id );
}

Заключение

Правильное использование хуков деинсталляции поможет вам поддерживать чистоту базы данных вашего WordPress-сайта и улучшить опыт пользователей. Убедитесь, что вы следуете рекомендациям и примерам, приведённым в этой статье, чтобы ваши плагины работали корректно и эффективно.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *