upgrader_process_complete
Срабатывает при завершении работы апгрейтера (upgrader). Позволяет сделать что-либо после обновления плагина, темы, WP, языкового пакета.
Хук срабатывает уже после того, как файлы обновляемого модуля обновлены. Например при обновлении плагина, хук сработает после того как файлы плагина будут обновлены.
Не обязательно использовать этот хук рано. Например его можно использовать в файле functions.php темы.
Смотрите также upgrader_package_options.
Использование
add_action( 'upgrader_process_complete', 'wp_kama_upgrader_process_complete_action', 10, 2 ); /** * Function for `upgrader_process_complete` action-hook. * * @param WP_Upgrader $upgrader WP_Upgrader instance. In other contexts this might be a Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance. * @param array $hook_extra Array of bulk item update data. * * @return void */ function wp_kama_upgrader_process_complete_action( $upgrader, $hook_extra ){ // action... }
- $this(WP_Upgrader)
Экземпляр WP_Upgrader.
При разных вариантах тут могут быть объекты:
- $hook_extra(массив)
Массив данных обновляемого элемента.
-
action(строка)
Тип события.
По умолчанию: 'update' -
type(строка)
Тип процесса обновления. Может быть:plugin
,theme
,translation
,core
. -
bulk(true/false)
Является ли процесс обновления массовым обновлением (bulk).
По умолчанию: true -
plugins(массив)
Массив путей к базовым именам основных файлов плагинов. -
themes(массив)
Ярлыки (слаги) темы. -
translations(массив)
Массив данных переводов.-
language(строка)
Локаль перевода. -
type(строка)
Вид перевода. Может быть:plugin
,theme
,core
. -
slug(строка)
Текстовый домен перевода. Ярлык (слаг) темы/плагина или "default" для основных переводов. - version(строка)
Версия темы, плагина или ядра.
-
-
Примеры
#1 Пример обновления плагина и того какие данные получает хук
Обновляем плагин Query Monitor с 3.3.2 на 3.3.3. И записываем данные переменных внутри хука в файл __upgrader_process_complete_info.txt
в корне сайта.
// Тест апгрейда add_action( 'upgrader_process_complete', 'my_upgrate_function', 10, 2); function my_upgrate_function( $upgrader_object, $hook_extra ){ $put = ''; $put .= '$upgrader_object = '. print_r( $upgrader_object, 1 ) ."\n\n\n"; $put .= '$hook_extra = '. print_r( $hook_extra, 1 ) ."\n\n\n"; foreach( $hook_extra['plugins'] as $plugin_rel_path ){ $data = get_plugin_data( WP_PLUGIN_DIR ."/$plugin_rel_path" ); $put .= "$plugin_rel_path data = ". print_r( $data, 1 ) ."\n\n\n"; } file_put_contents( "{$_SERVER['DOCUMENT_ROOT']}/__upgrader_process_complete_info.txt", $put ); }
Получим в файле __upgrader_process_complete_info.txt
(внутри функции-хука):
#2 Уведомление при обновлении плагина
Этот мини-плагин демонстрирует, как отображать уведомление при обновлении плагина.
Отображает разные уведомления в админке (см. admin_notices): одно при установке плагина (активации) и другое при обновлении плагина (для этого используется текущий хук).
<?php /** * Plugin Name: Upgrader Process Example * Plugin URI: https://catapultthemes.com/wordpress-plugin-update-hook-upgrader_process_complete/ * Description: Just an example of using upgrader_process_complete * Version: 1.0.0 * Author: Catapult Themes * Author URI: https://catapultthemes.com/ * Text Domain: wp-upe * Domain Path: /languages */ defined( 'ABSPATH' ) || exit; add_action( 'upgrader_process_complete', 'wp_upe_upgrade_completed', 10, 2 ); add_action( 'admin_notices', 'wp_upe_display_update_notice' ); add_action( 'admin_notices', 'wp_upe_display_install_notice' ); # При активации. Переходный режим, чтобы мы знали, что только что активировали плагин register_activation_hook( __FILE__, function() { set_transient( 'wp_upe_activated', 1 ); } ); /** * This function runs when WordPress completes its upgrade process * It iterates through each plugin updated to see if ours is included * * @param array $upgrader_object * @param array $options */ function wp_upe_upgrade_completed( $upgrader_object, $options ) { // The path to our plugin's main file $our_plugin = plugin_basename( __FILE__ ); // If an update has taken place and the updated type is plugins and the plugins element exists if( $options['action'] === 'update' && $options['type'] === 'plugin' && isset( $options['plugins'] ) ) { // Iterate through the plugins being updated and check if ours is there foreach( $options['plugins'] as $plugin ) { if( $plugin == $our_plugin ) { // Set a transient to record that our plugin has just been updated set_transient( 'wp_upe_updated', 1 ); } } } } /** * Show a notice to anyone who has just updated this plugin * This notice shouldn't display to anyone who has just installed the plugin for the first time */ function wp_upe_display_update_notice() { // Check the transient to see if we've just updated the plugin if( get_transient( 'wp_upe_updated' ) ) { echo '<div class="notice notice-success"><p>' . __( 'Thanks for updating', 'wp-upe' ) . '</p></div>'; delete_transient( 'wp_upe_updated' ); } } /** * Show a notice to anyone who has just installed the plugin for the first time * This notice shouldn't display to anyone who has just updated this plugin */ function wp_upe_display_install_notice() { // Check the transient to see if we've just activated the plugin if( get_transient( 'wp_upe_activated' ) ) { echo '<div class="notice notice-success"><p>' . __( 'Thanks for installing', 'wp-upe' ) . '</p></div>'; // Delete the transient so we don't keep displaying the activation message delete_transient( 'wp_upe_activated' ); } }
Список изменений
С версии 3.6.0 | Введена. |
С версии 3.7.0 | Added to WP_Upgrader::run(). |
С версии 4.6.0 | $translations was added as a possible argument to $hook_extra. |
Где вызывается хук
do_action( 'upgrader_process_complete', $this, $options['hook_extra'] );
do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'theme', 'bulk' => true, 'themes' => $themes, ) );
do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'plugin', 'bulk' => true, 'plugins' => $plugins, ) );
do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'translation', 'bulk' => true, 'translations' => $language_updates_results, ) );
do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'core', ) );
Где используется хук в WordPress
add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 );
remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
remove_action( 'upgrader_process_complete', 'wp_version_check' );
remove_action( 'upgrader_process_complete', 'wp_update_plugins' );
remove_action( 'upgrader_process_complete', 'wp_update_themes' );
add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9, 0 );
remove_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9 );
add_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9, 0 );
remove_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9 );
add_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9, 0 );
remove_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9 );
add_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9, 0 );
remove_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9 );
remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
remove_action( 'upgrader_process_complete', 'wp_version_check' );
remove_action( 'upgrader_process_complete', 'wp_update_plugins' );
remove_action( 'upgrader_process_complete', 'wp_update_themes' );
add_action( 'upgrader_process_complete', array( $this, 'invalidate_mo_files_cache' ), 10, 2 );