Функция register_uninstall_hook()
предназначена для регистрации хука, который будет вызван, когда пользователь нажимает на ссылку удаления плагина. Эта ссылка будет активна только если плагин корректно подключается к этому хуку.
При использовании этой функции необходимо помнить, что произвольный код не должен выполняться вне функций, поскольку в процессе удаления могут возникнуть проблемы. Если плагин не может работать без выполнения кода вне функций, следует создать файл uninstall.php
в корневом каталоге плагина. Этот файл будет вызван, если он существует, во время процесса удаления.
register_uninstall_hook( string $file, callable $callback )
Параметры
- $file (string, обязательный): путь к главному файлу плагина.
- $callback (callable, обязательный): функция обратного вызова, которая будет вызвана при удалении плагина. Она должна быть статическим методом или обычной функцией.
Возвращаемое значение
Функция ничего не возвращает (null
).
Пример 1: Регистрация хука удаления
В этом примере мы зарегистрируем хук удаления для плагина Simple Notes. Мы добавим следующий код в основной файл плагина:
// Файл: simple-notes.php
register_activation_hook( __FILE__, 'simple_notes_activate' );
function simple_notes_activate() {
register_uninstall_hook( __FILE__, 'simple_notes_uninstall' );
}
function simple_notes_uninstall() {
// Код для выполнения при удалении плагина
delete_option('simple_notes_options'); // Удаление опции плагина
}
Пример 2: Удаление для классов
Если ваш плагин написан с использованием объектно-ориентированного программирования (ООП), вы можете зарегистрировать хук удаления следующим образом:
// Файл: advanced-notes.php
register_uninstall_hook( __FILE__, array( 'Advanced_Notes', 'uninstall' ) );
class Advanced_Notes {
public static function uninstall() {
if ( ! current_user_can( 'activate_plugins' ) ) {
return;
}
// Проверяем, действительно ли это файл, зарегистрированный во время удаления
if ( plugin_basename( __FILE__ ) !== WP_UNINSTALL_PLUGIN ) {
return;
}
// Код для выполнения при удалении плагина
delete_option('advanced_notes_options');
}
public function __construct() {
// Запуск плагина: добавьте хуки на нужные функции
}
}
Пример 3: Использование uninstall.php
Если вы не можете организовать код таким образом, чтобы он запускался только через хуки, лучше использовать файл uninstall.php
. Пример такого файла может выглядеть следующим образом:
// Файл: uninstall.php
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit();
}
$option_name = 'advanced_notes_options';
// Удаление опции для обычного сайта
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 );
}
Заключение
Функция register_uninstall_hook()
является важным инструментом для разработчиков плагинов, позволяя им очищать данные и выполнять другие задачи при удалении плагина. Используя приведенные примеры, вы можете легко интегрировать хук удаления в свои плагины, обеспечивая корректное удаление всех следов вашего плагина из системы. Если возможно, используйте файл uninstall.php
, так как это более надежный способ обработки удаления.