Хук upgrader_process_complete
в WordPress используется для выполнения действий после завершения процесса обновления плагина, темы, ядра или языкового пакета. Это позволяет разработчикам добавлять свою логику, которая будет выполнена после того, как обновление завершено.
do_action( ‘upgrader_process_complete’, WP_Upgrader $upgrader, array $hook_extra )
Данный хук срабатывает после успешного завершения процесса обновления, что дает возможность выполнить дополнительные действия, такие как отображение уведомлений или выполнение специфических настроек.
Параметры
Хук принимает два параметра:
- $upgrader: Это экземпляр класса
WP_Upgrader
, который может быть также представителем других классов, таких какPlugin_Upgrader
,Theme_Upgrader
,Core_Upgrader
илиLanguage_Pack_Upgrader
. - $hook_extra: Массив, содержащий информацию об обновляемых элементах. Включает в себя:
action
: Тип действия (по умолчанию ‘update’).type
: Тип процесса обновления (может быть ‘plugin’, ‘theme’, ‘translation’ или ‘core’).bulk
: Указывает, является ли процесс массовым обновлением (по умолчанию true).plugins
: Массив с путями к основным файлам обновляемых плагинов.themes
: Массив со слагами обновляемых тем.translations
: Массив с данными об обновлении переводов.language
: Локаль для перевода.slug
: Текстовый домен для перевода.version
: Версия обновляемого элемента.
Пример 1: Уведомление при обновлении плагина
В этом примере мы создадим плагин, который будет отображать уведомление после обновления:
<?php
/*
Plugin Name: Уведомление об обновлении плагина
Plugin URI: https://example.com/
Description: Пример использования хука upgrader_process_complete
Version: 1.0.0
Author: Ваше Имя
*/
defined('ABSPATH') || exit;
// Хук на завершение обновления
add_action('upgrader_process_complete', 'notify_on_plugin_update', 10, 2);
function notify_on_plugin_update($upgrader, $hook_extra) {
// Путь к файлу плагина
$my_plugin = plugin_basename(__FILE__);
// Проверяем, произошло ли обновление и относится ли оно к плагинам
if ($hook_extra['action'] === 'update' && $hook_extra['type'] === 'plugin' && isset($hook_extra['plugins'])) {
foreach ($hook_extra['plugins'] as $plugin) {
if ($plugin === $my_plugin) {
// Устанавливаем временное значение, чтобы показать уведомление
set_transient('my_plugin_updated', true);
}
}
}
}
// Отображаем уведомление
add_action('admin_notices', 'show_update_notice');
function show_update_notice() {
if (get_transient('my_plugin_updated')) {
echo '<div class="notice notice-success"><p>' . __('Плагин успешно обновлен!', 'text-domain') . '</p></div>';
delete_transient('my_plugin_updated');
}
}
Пример 2: Логирование данных обновления
В этом примере мы создадим плагин, который будет логировать данные об обновлении в файл:
<?php
/*
Plugin Name: Логирование обновлений
Plugin URI: https://example.com/
Description: Логирует данные об обновлениях плагинов
Version: 1.0.0
Author: Ваше Имя
*/
defined('ABSPATH') || exit;
// Хук на завершение обновления
add_action('upgrader_process_complete', 'log_updater_process', 10, 2);
function log_updater_process($upgrader, $hook_extra) {
$log_data = '';
$log_data .= 'Обновление завершено. Данные: ' . print_r($hook_extra, true) . "\n\n";
// Логируем информацию о каждом обновляемом плагине
foreach ($hook_extra['plugins'] as $plugin_path) {
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_path);
$log_data .= "Плагин: " . $plugin_data['Name'] . ", Версия: " . $plugin_data['Version'] . "\n";
}
// Записываем данные в файл
file_put_contents(__DIR__ . '/updater_process_log.txt', $log_data, FILE_APPEND);
}
Заключение
Хук upgrader_process_complete
является мощным инструментом для разработчиков, позволяющим выполнять действия после завершения обновлений. С его помощью можно реализовывать разнообразные функции, такие как уведомления, логирование и дополнительные настройки. Используя приведенные примеры, вы сможете адаптировать свою логику в соответствии с требованиями вашего проекта.