ตั้งแต่ WordPress 3.9 คุณสามารถใช้upgrader_process_complete
เบ็ด
ดูข้อมูลอ้างอิง1 , 2
นี่คือตัวอย่างรหัส:
<?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
เมื่ออัปเดตปลั๊กอินแล้วมันจะตั้งค่างานเป็น db โดยใช้set_transient()
ฟังก์ชั่น ไม่แนะนำให้เพิ่มรหัสอัพเดทในขณะที่โทรหาupgrader_process_complete
hook
ถัดไปหากคุณเรียกดูหน้าผู้ดูแลระบบคนอื่น ๆplugins_loaded
hook จะใช้งานได้และรหัสการอัปเดตจะทำงานที่นั่น
โปรดทราบว่าปลั๊กอินนี้จะต้องเปิดใช้งานเพื่อให้เบ็ดการอัปเดตทำงานได้
สิ่งนี้ไม่ทำงานในการเปิดใช้งานปลั๊กอินดังนั้นหากคุณต้องการรหัสที่ใช้งานได้กับการเปิดใช้งานปลั๊กอินที่คุณต้องใช้รหัสในการregister_activation_hook()
ทำงาน