プラグインの機能拡張に伴い自動的にoptionの値を更新したい、ということがあります。wordpressにはプラグインをアクティベートしたときにフックする [register activation hook] がありますが、アップデート時には起動しません。(昔は動いていたらしい。)しばらく前にinit関数に引っ掛けて云々というのを読んだ記憶もあって、面倒だと思いoptionの値を更新しなくてもすむようにやりくりしてきました。
しかしどうしても避けきれなくなり、今回あらためて調べ直したところ、[upgrader process complete] なるすばらしいフックを発見した次第です。プラグインやテーマ、ワードプレスなどのアップグレードにあわせて作動させることができます。どうやら設置されてすでに3年以上経つらしい。今日まで知らんかった・・・。ということで、日本語の記事も見当たらなかったのでメモしておきます。すでに常識なのかもしれませんが。
add_action( 'upgrader_process_complete', 'my_upgrader_process_complete', 10, 2 );
function my_upgrader_process_complete( $upgrader_object, $options ) {
$current_plugin_path_name = plugin_basename( __FILE__ );
if ($options['action'] == 'update' && $options['type'] == 'plugin' ){
foreach($options['plugins'] as $each_plugin){
if ($each_plugin == $current_plugin_path_name ){
// YOUR CODES
}
}
}
}
たとえばマルチバイトパッチと自作プラグインの二つを更新したとします。すると$optionsの返り値は、以下のような感じになります。codexではなぜか[packages]になってましたが代わりに[plugins]というkeyが返って来ました。おそらくこの[plugins]は必ず取得できるわけではなく、themeやwpの更新時にはそれぞれのkeyが適宜追加される仕様になっているような気がしますので、必ず[action]と[type]を取得して条件分岐をする必要がありそうです。
Array
(
[action] => update
[type] => plugin
[bulk] => 1
[plugins] => Array
(
[0] => wp-multibyte-patch/wp-multibyte-patch.php
[1] => my-plugin/my-plugin.php
)
)