Функция register_deactivation_hook()
в WordPress необходима для обработки задач, которые должны выполняться при деактивации плагина. Эта функция позволяет разработчикам указать обратный вызов, который будет выполняться в процессе деактивации, что позволяет выполнять очистку и другие необходимые действия.
register_deactivation_hook( string $file, callable $callback )
Когда плагин деактивируется, WordPress вызывает действие deactivate_PLUGINNAME
, где PLUGINNAME
соответствует имени файла плагина. Это означает, что вы можете запустить конкретный код для очистки настроек, удаления временных данных или выполнения других необходимых операций.
Параметры
- $file (строка, обязательный): Имя файла плагина, включая путь, обычно указывается с использованием константы
__FILE__
. - $callback (callable, обязательный): Функция, которая будет выполняться при деактивации плагина.
Пример 1: Простой хук деактивации
Предположим, вы хотите запустить функцию с именем my_custom_deactivate()
, когда ваш плагин будет деактивирован. Вы можете настроить это следующим образом:
// Главный файл плагина
// Защита от прямого доступа
defined( 'ABSPATH' ) || exit;
// Регистрируем хук деактивации
register_deactivation_hook( __FILE__, 'my_custom_deactivate' );
function my_custom_deactivate() {
// Действия, которые нужно выполнить при деактивации
delete_option('my_plugin_option'); // Удаляем опцию плагина
}
В этом примере, когда плагин деактивируется, функция my_custom_deactivate()
выполнится и удалит конкретную опцию из базы данных WordPress.
Пример 2: Использование класса
Если ваш плагин организован как класс, вы можете зарегистрировать хук деактивации следующим образом:
// Главный файл плагина
// Защита от прямого доступа
defined( 'ABSPATH' ) || exit;
register_deactivation_hook( __FILE__, array( 'MyPluginClass', 'deactivate' ) );
class MyPluginClass {
public static function deactivate() {
// Задачи по очистке
delete_option('my_plugin_option');
}
}
десь метод deactivate()
класса MyPluginClass
будет выполнен при деактивации плагина.
Пример 3: Обработка сетевой деактивации
Для плагинов, которые используются в многосайтовой сети, может потребоваться обработка сетевой деактивации. Следующий пример демонстрирует, как управлять этим процессом:
// Главный файл плагина
// Защита от прямого доступа
defined( 'ABSPATH' ) || exit;
register_deactivation_hook( __FILE__, array( 'MyNetworkPlugin', 'deactivate' ) );
class MyNetworkPlugin {
public static function deactivate($network_deactivating) {
if ($network_deactivating) {
// Обработка сетевой деактивации
$sites = get_sites();
foreach ($sites as $site) {
switch_to_blog($site->blog_id);
delete_option('my_plugin_option');
restore_current_blog();
}
} else {
// Обработка обычной деактивации
delete_option('my_plugin_option');
}
}
}
Этот код проверяет, деактивируется ли плагин на уровне сети, и выполняет соответствующие действия.
Лучшие практики
- Избегайте тяжелых операций: Поскольку плагин все еще активен во время деактивации, избегайте тяжелых операций, которые могут замедлить сайт.
- Используйте пространства имен: Если ваш плагин использует пространства имен, не забудьте правильно указать функцию в вызове
register_deactivation_hook()
.
// Пример с пространством имен
namespace MyNamespace;
register_deactivation_hook( __FILE__, __NAMESPACE__ . '\my_deactivation_function' );
function my_deactivation_function() {
// Код для очистки
}
Заключение
Функция register_deactivation_hook()
— это мощный инструмент для разработчиков плагинов WordPress. Она позволяет выполнять необходимые задачи очистки во время деактивации плагина. Правильное использование этой функции может привести к более аккуратному и удобному для пользователя опыту.