Kể từ WordPress 3.9, bạn có thể sử dụng upgrader_process_complete
hook.
Xem tài liệu tham khảo 1 , 2
Đây là một mã ví dụ:
<?php
/**
* Plugin Name: Test plugin 1
* Plugin URI: http://rundiz.com
* Description: A very simple plugin for testing. This plugin do nothing.
* Version: 0.1.8
* Author: Vee Winch
* Author URI: http://rundiz.com
* License: MIT
* License URI: https://opensource.org/licenses/MIT
* Text Domain: test-plugin1
* Domain Path:
*/
$wppstp1_version = '0.1.8';
add_action('upgrader_process_complete', 'wppstp1_upgrade', 10, 2);// will working only this plugin activated.
function wppstp1_upgrade(\WP_Upgrader $upgrader_object, $hook_extra)
{
global $wppstp1_version;
if (is_array($hook_extra) && array_key_exists('action', $hook_extra) && array_key_exists('type', $hook_extra) && array_key_exists('plugins', $hook_extra)) {
// check first that array contain required keys to prevent undefined index error.
if ($hook_extra['action'] == 'update' && $hook_extra['type'] == 'plugin' && is_array($hook_extra['plugins']) && !empty($hook_extra['plugins'])) {
// if this action is update plugin.
$this_plugin = plugin_basename(__FILE__);
foreach ($hook_extra['plugins'] as $each_plugin) {
if ($each_plugin == $this_plugin) {
// if this plugin is in the updated plugins.
// don't process anything from new version of code here, because it will work on old version of the plugin.
file_put_contents(WP_CONTENT_DIR . '/test.txt', 'v'.$wppstp1_version."\r\n", FILE_APPEND); // you will always get the previous version even you update to the new version.
// set transient to let it run later.
set_transient('wppstp1_updated', 1);
}
}// endforeach;
unset($each_plugin);
}// endif update plugin and plugins not empty.
}// endif; $hook_extra
}// wppstp1_upgrade
add_action('plugins_loaded', 'wppstp1_runUpdatedPlugin');
function wppstp1_runUpdatedPlugin()
{
global $wppstp1_version;
if (get_transient('wppstp1_updated') && current_user_can('manage_options')) {
// if plugin updated and current user is admin.
file_put_contents(WP_CONTENT_DIR . '/test-update-by-transient.txt', 'v'.$wppstp1_version."\r\n", FILE_APPEND);// you will always get the updated version here.
// update code here.
// delete transient.
delete_transient('wppstp1_updated');
}
}// wppstp1_runUpdatedPlugin
Khi plugin được cập nhật, nó sẽ đặt tác vụ vào db bằng cách sử dụng set_transient()
hàm. Không nên thêm mã cập nhật trong khi gọi upgrader_process_complete
hook.
Tiếp theo, nếu bạn duyệt đến trang quản trị khác,plugins_loaded
hook sẽ hoạt động và mã cập nhật sẽ hoạt động ở đó.
Xin lưu ý rằng plugin này phải được kích hoạt để cập nhật hook hoạt động.
Điều này không hoạt động trên plugin kích hoạt, vì vậy, nếu bạn muốn mã hoạt động khi kích hoạt plugin, bạn phải mã hóa nó trong register_activation_hook()
chức năng.