- サイトデザイン工事中です。ご意見をお寄せください。
- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
関数リファレンス/register activation hook
関数register_activation_hook(WordPress2.0より導入)はプラグインが有効化されたときに実行される関数を登録します。
これはアクション・フックactivate_{$PLUGIN_NAME}を利用するよりも簡単です。
使用法
<?php register_activation_hook($file, $function); ?>
パラメータ
- $file
- (string) (必須) wp-content/pluginsディレクトリにあるメインプラグインファイルへのパス。フルパスが有効です。
- 初期値: なし
- $function
- (callback) (必須) プラグインが有効化されたときに実行される関数。PHPにおける疑似的な型callbackとして許可されたものである必要があります。
- 初期値: なし
使用例
関数myplugin_activate()がメインプラグインファイルに定義されていて、下記の場所いずれかに置かれているものとします。
- wp-content/plugins/myplugin.php
- wp-content/plugins/myplugin/myplugin.php
コード:
register_activation_hook( __FILE__, 'myplugin_activate' );
このコードはプラグイン有効化のときに関数myplugin_activate()を呼び出します。アクション・フックactivate_PLUGIN_NAMEを使うよりも信頼性の高い方法です。
注意点
- 稼働するコードを例として挙げている関連トピック: http://wordpress.org/support/topic/312342
- プラグインの中でplugins_loadedフックを使っても時既に遅しで稼働しません。
変数のスコープに関する注意点
もしグローバル変数を使っているのなら、register_activation_hook()に渡した関数は呼び出された時点においてグローバル変数へのアクセス権を持っていないということを念頭に置いてください。これは以下のようにグローバルスコープへの参照を宣言しても同じことです。
$myvar='whatever';
function myplugin_activate() {
global $myvar;
echo $myvar; // 'whatever'にはならない
}
register_activation_hook( __FILE__, 'myplugin_activate' );
これは初めてのインクルードであるため、まだグローバルスコープにインクルードされないのです。プラグインファイルはactivate_plugin関数内で読み込まれており、プラグン本体はまだグローバルスコープにあるわけではないのです。
この点は明白に理解しておく必要があります。もし変数がグローバルスコープにあってほしいのなら、そのように宣言し、どこからでも使えるようにする必要があります。プラグイン本体の中で使っている変数ならば、グローバル変数として宣言する必要があります。
プラグインが有効化されると、あなたのプラグインは別の関数から読み込まれ、その関数内であなたの登録した関数myplugin_activate()は有効化が完了した時点で実行されます(正確に言うとactivate_plugin())。そのため、あなたがグローバルスコープとして宣言しない限り、プラグイン本体の変数は関数activate_plugin()のスコープにあってグローバルではありません。
global $myvar;
$myvar='whatever';
function myplugin_activate() {
global $myvar;
echo $myvar; // this will be 'whatever'
}
register_activation_hook( __FILE__, 'myplugin_activate' );
これに関する詳しい情報はこちら: http://wordpress.org/support/topic/201309