register_uninstall_hook() WP 2.7.0

Реєструє функцію, яка викликається при видаленні плагіна, щоб почистити всі сліди перебування плагіна в системі.

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

Функція повинна викликатись з основного файлу, а не з функцій чи класів. В іншому випадку хук видалення може не працювати.

Рекомендується реєструвати хук видалення лише один раз при активації плагіна, тому що ця функція перевіряє і якщо треба записує функцію видалення WP опцію. Див. https://core.trac.wordpress.org/ticket/31792 Див. приклади нижче.

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

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

uninstall.php

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

  1. Створіть файл uninstall.php у кореневому каталозі плагіна;
  2. Розмістіть код, який видаляє всі сліди плагіна.

Файл uninstall.php має виглядати так:

<?php
if( ! defined('WP_UNINSTALL_PLUGIN') )
	exit;

// Перевірка пройдена успішно. Починаючи звідси, видаляємо опції і все інше.
delete_option('my_option');

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

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

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

Докладніше читайте у статті Видалення плагіна .

Хуків немає.

Повертає

null. Нічого не вертає.

Використання

register_uninstall_hook($file, $callback);
$file
(рядок) (обов’язковий)
Шлях до головного файлу плагіна. Зазвичай використовується чарівна константа
__FILE__, при цьому register_uninstall_hook() повинна викликатися з головного файлу плагіна.
$callback
(рядок/масив) (обов’язковий)
Назва функції зворотного дзвінка. Для класів використовуйте масив:
array( 'Class_Name', 'method_name' );. Тут метод обов’язково має бути статичним.

Приклади

Хороший приклад виклику трьох функцій: register_uninstall_hook(), register_activation_hook(), register_deactivation_hook(), дивіться у прикладах цієї функції .

0

#1 Реєстрації хука деінсталяції, у файлі плагіна:

/* ... вище не повинно бути відкритих кодів,
що підключаються безпосередньо, не через хуки.
*/
register_uninstall_hook(__FILE__, 'wm_ya_db_uninstall');

function wm_ya_db_uninstall() {
	delete_option("option_name");
}
/* ... нижче не повинно бути відкритих кодів,
що підключаються безпосередньо, не через хуки.
*/
function plugin_function(){
	// код функції плагіна
}
add_action('init', 'plugin_function');
0

#2 Вилучення для ОВП

Наприклад, показує як реєструвати хук деінсталяції для класів.

register_uninstall_hook() не можна викликати всередині класу, вона повинна викликатись зовні та вказувати на метод класу.

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;

		// Розкоментуйте цей рядок, щоб побачити функцію в дії
		// exit (var_dump ($_GET));
	}

	public function __construct() {
		// Запуск плагіна: додайте хуки на потрібні функції
	}
}
0

#3 Файл uninstall.php

Замість використання “примхливої” функції register_uninstall_hook() краще використовувати файл uninstall.php.

Приклад того, як має виглядати файл 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);
}

список змін

З версії 2.7.0Введено.

Код register_uninstall_hook() WP 6.0.2

function register_uninstall_hook( $file, $callback ) {
	if ( is_array( $callback ) && is_object( $callback[0] ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Тільки класична методика методу або функція може бути використана в uninstall hook.' ), '3.1.0' );
		return;
	}

	/*
	 * The option should not be autoloaded, because it is not needed in most
	 * Cases. Emphasis повинен бути запущений за допомогою 'uninstall.php' way of
	 * uninstalling the plugin.
	 */
	$uninstallable_plugins = (array) get_option( 'uninstall_plugins' );
	$plugin_basename = plugin_basename($file);

	if ( !isset( $uninstallable_plugins[ $plugin_basename ] ) ) || $uninstallable_plugins[ $plugin_basename ] !== $callback ) {
		$uninstallable_plugins[ $plugin_basename ] = $callback;
		update_option( 'uninstall_plugins', $uninstallable_plugins );
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *