WordPress でプラグインを有効にしたときのアクションフック [ activate_プラグイン名 ]は使えない?
WordPress 2.7 で確認しています。プラグインを作成していて気がついたのですが、プラグインを有効にしたときのアクションフック activate_プラグイン名 は動作していないのではないでしょうか。
プラグイン API/アクションフック一覧 – WordPress Codex 日本語版
activate_プラグインファイル名
プラグインを初めて有効化する際に実行する。
とあるのです、プラグインの中で設定してみてやってみましたがどうもうまく動作しませんでした。プラグインを有効にしている部分のソースを見てみたのですが、
wp-admin/plugins.php
if( !empty($action) ) { switch( $action ) { case 'activate': check_admin_referer('activate-plugin_' . $plugin); $result = activate_plugin($plugin, 'plugins.php?error=true&plugin=' . $plugin); if ( is_wp_error( $result ) ) wp_die($result); $recent = (array)get_option('recently_activated'); if ( isset($recent[ $plugin ]) ) { unset($recent[ $plugin ]); update_option('recently_activated', $recent); } wp_redirect('plugins.php?activate=true'); // overrides the ?error=true one above exit; break;
とまったく do_action している感じがありません。
do_action で activate_プラグイン名を実行しているのは下記の部分のみ。action=’error_scrape’ ってどういう場合なのか分からなかった。
case 'error_scrape': check_admin_referer('plugin-activation-error_' . $plugin); $valid = validate_plugin($plugin); if ( is_wp_error($valid) ) wp_die($valid); error_reporting( E_ALL ^ E_NOTICE ); @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. include(WP_PLUGIN_DIR . '/' . $plugin); do_action('activate_' . $plugin); exit; break;
ドキュメントを読んでみると
Plugin API/Action Reference/activate (plugin file name) ? WordPress Codex
It is recommended to use the function register_activation_hook() instead of this function.
と書かれているので、register_activation_hook のドキュメントを見てみた。
Function Reference/register activation hook ? WordPress Codex
The function register_activation_hook (introduced in WordPress 2.0) registers a plugin function to be run when the plugin is activated.
This is easier than using the activate_pluginname action.
どうも register_activation_hook を使った方が良さそうです。
プラグインを無効にした時の処理をしたい場合は register_deactivation_hook です。
結局下記のように書いてうまく動作しました。
function my_activation_function_name() { // プラグインを有効にしたときの処理を書く } register_activation_hook(__FILE__, 'my_activation_function_name'); function my_deactivation_function_name() { // プラグインを無効にしたときの処理を書く } register_deactivation_hook(__FILE__, 'my_deactivation_function_name');
関連する投稿
One comment
コメントをどうぞ
Additional comments powered by BackType
[...] WordPress でプラグインを有効にしたときのアクションフック [ activate_プラグ... プラグイン登録時、無効時にフックして、テーブルの作成・削除を行う。 [...]