Регистрация хуков деинсталляции плагина в 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-сайта и улучшить опыт пользователей. Убедитесь, что вы следуете рекомендациям и примерам, приведённым в этой статье, чтобы ваши плагины работали корректно и эффективно.