- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
「関数リファレンス/register activation hook」の版間の差分
(PHP の文法エラーを修正。また、Coding Standard への準拠。) |
|||
(他の1人の利用者による、間の6版が非表示) | |||
8行目: | 8行目: | ||
<div id="Usage"> | <div id="Usage"> | ||
+ | == 関数の定義 == | ||
+ | |||
+ | '''register_activation_hook( string $file, callable $function ) ''' | ||
+ | |||
+ | |||
== 使用法 == | == 使用法 == | ||
</div> | </div> | ||
関数を使う場合(クラスメソッドを使わない場合) | 関数を使う場合(クラスメソッドを使わない場合) | ||
− | <pre> | + | <pre>register_activation_hook($file, $function);</pre> |
関数を使わない場合(クラスメソッドを使う場合) | 関数を使わない場合(クラスメソッドを使う場合) | ||
− | <pre> | + | <pre> |
− | + | class Hoge { | |
− | + | public function __construct() { | |
− | + | register_activation_hook(__FILE__, array( $this, 'fuga' ) ); | |
− | + | } | |
− | + | public function fuga() { | |
− | + | ||
− | + | ||
} | } | ||
− | + | } | |
− | ; | + | $hoge = new Hoge(); |
+ | </pre> | ||
register_activation_hook関数の第二引数となっている配列は、[https://developer.wordpress.org/reference/functions/add_action/ add_action関数 ]の第二引数である$function_to_addへ引き渡されます。そのadd_action関数において、クラス内でクラスメソッドを使用する場合には、そのクラスメソッドがどのクラスに存在するか明示する必要があります。従って、register_activation_hookの第二引数ではPHPの[http://php.net/manual/ja/language.oop5.basic.php 擬似変数]で自分が属するクラスを明示し、第二引数でクラスメソッドを使用することになります。 | register_activation_hook関数の第二引数となっている配列は、[https://developer.wordpress.org/reference/functions/add_action/ add_action関数 ]の第二引数である$function_to_addへ引き渡されます。そのadd_action関数において、クラス内でクラスメソッドを使用する場合には、そのクラスメソッドがどのクラスに存在するか明示する必要があります。従って、register_activation_hookの第二引数ではPHPの[http://php.net/manual/ja/language.oop5.basic.php 擬似変数]で自分が属するクラスを明示し、第二引数でクラスメソッドを使用することになります。 |
2017年6月25日 (日) 17:26時点における最新版
目次
解説
関数register_activation_hook(WordPress2.0より導入)はプラグインが有効化されたときに実行される関数を登録します。
これはアクション・フックactivate_{$PLUGIN_NAME}を利用するよりも簡単です。
関数の定義
register_activation_hook( string $file, callable $function )
使用法
関数を使う場合(クラスメソッドを使わない場合)
register_activation_hook($file, $function);
関数を使わない場合(クラスメソッドを使う場合)
class Hoge { public function __construct() { register_activation_hook(__FILE__, array( $this, 'fuga' ) ); } public function fuga() { } } $hoge = new Hoge();
register_activation_hook関数の第二引数となっている配列は、add_action関数 の第二引数である$function_to_addへ引き渡されます。そのadd_action関数において、クラス内でクラスメソッドを使用する場合には、そのクラスメソッドがどのクラスに存在するか明示する必要があります。従って、register_activation_hookの第二引数ではPHPの擬似変数で自分が属するクラスを明示し、第二引数でクラスメソッドを使用することになります。
【参照ページ】
https://developer.wordpress.org/reference/functions/add_action/#comment-355
パラメータ
- $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を使うよりも信頼性の高い方法です。
プロセスの流れ
プラグインがアクティブになっている直後に何かをすることに興味があるなら、発動後のフック処理は、インスタントのリダイレクトを実行することに注意することが重要です。
リダイレクトが発生するまで、 add_action() または add_filter()タイプ呼び出しを使用することは不可能です
'activated_plugin」と「シャットダウン」のみ2つのフックは、プラグインの起動フックの後に解雇されています)。
'activated_plugin' と 'shutdown'の2つのフックをプラグインの起動フックの後に実行されています。
(e.g., only two hooks are fired after the plugin's activation hook: 'activated_plugin' and 'shutdown').
このひねりへの迅速な回避策は、次のように add_option() / enを使用することです。:
/* メインプラグインファイル */ ... function my_plugin_activate() { add_option( 'Activated_Plugin', 'Plugin-Slug' ); /* ここでアクティベーションコード */ } register_activation_hook( __FILE__, 'my_plugin_activate' ); function load_plugin() { if ( is_admin() && get_option( 'Activated_Plugin' ) == 'Plugin-Slug' ) { delete_option( 'Activated_Plugin' ); /* do stuff once right after activation */ // example: add_action( 'init', 'my_init_function' ); } } add_action( 'admin_init', 'load_plugin' );
投稿全体をチェックアウトすることができます @ http://stackoverflow.com/questions/7738953/is-there-a-way-to-determine-if-a-wordpress-plugin-is-just-installed/13927297#13927297.
しかし、このような、 do_action()を使用することが可能です。:
function my_plugin_activate() { do_action( 'my_plugin_activate' ); } register_activation_hook( __FILE__, 'my_plugin_activate' );
含まれるプラグインファイル、さらには他のプラグインは、このアクションにフックすることができるようになります。
注意点
- 稼働するコードを例として挙げている関連トピック: 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
外部リソース
- Activation checklist for WordPress plugin developers: A tutorial that explains not only the activation hook, but also other topics related to plugin activation such as how to manage updates, rewrite rules, welcome screen etc.
- A good example for a basic activation/deactivation/uninstall class by "kaiser" can be found here on WPSE: http://wordpress.stackexchange.com/questions/25910/uninstall-a-plugin-method-typical-features-how-to/25979#25979
更新履歴
- 3.1 : This hook is now fired only when the user activates the plugin and not when an automatic plugin update occurs (#14915).
- 新規導入: 2.0
ソースファイル
register_activation_hook() は wp-includes/plugin.php
にあります。
関連情報
最新英語版: WordPress Codex » Function_Reference/register_activation_hook (最新版との差分)