• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

「関数リファレンス/register activation hook」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(Process Flow: リンク)
(PHP の文法エラーを修正。また、Coding Standard への準拠。)
 
(2人の利用者による、間の17版が非表示)
8行目: 8行目:
  
 
<div id="Usage">
 
<div id="Usage">
 +
== 関数の定義 ==
 +
 +
'''register_activation_hook( string $file, callable $function ) '''
 +
 +
 
== 使用法 ==
 
== 使用法 ==
 
</div>
 
</div>
  
<pre>&lt;?php register_activation_hook($file, $function); ?&gt;</pre>
+
関数を使う場合(クラスメソッドを使わない場合)
 +
<pre>register_activation_hook($file, $function);</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 擬似変数]で自分が属するクラスを明示し、第二引数でクラスメソッドを使用することになります。
 +
 
 +
【参照ページ】
 +
 
 +
https://goo.gl/rJHinX
 +
 
 +
https://developer.wordpress.org/reference/functions/add_action/#comment-355
  
 
<div id="Parameters">
 
<div id="Parameters">
17行目: 43行目:
 
</div>
 
</div>
  
{{Parameter|$file|string|<tt>wp-content/plugins</tt>ディレクトリにある[[%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90#.E3.83.97.E3.83.A9.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.BB.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB|メインプラグインファイル]]へのパス。フルパスが有効です。}}
+
{{Parameter|$file|string|<tt>wp-content/plugins</tt>ディレクトリにある[[%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90#.E3.83.97.E3.83.A9.E3.82.B0.E3.82.A4.E3.83.B3.E3.83.BB.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB|メインプラグインファイル]]へのパス。[http://php.net/manual/ja/language.constants.predefined.php フルパス]が有効です。}}
  
 
{{Parameter|$function|callback|プラグインが有効化されたときに実行される関数。[http://us2.php.net/manual/ja/language.pseudo-types.php PHPにおける疑似的な型callback]として許可されたものである必要があります。}}
 
{{Parameter|$function|callback|プラグインが有効化されたときに実行される関数。[http://us2.php.net/manual/ja/language.pseudo-types.php PHPにおける疑似的な型callback]として許可されたものである必要があります。}}
39行目: 65行目:
 
</div>
 
</div>
  
{{NeedTrans|一部}}
 
 
プラグインがアクティブになっている直後に何かをすることに興味があるなら、発動後のフック処理は、インスタントのリダイレクトを実行することに注意することが重要です。
 
プラグインがアクティブになっている直後に何かをすることに興味があるなら、発動後のフック処理は、インスタントのリダイレクトを実行することに注意することが重要です。
 
 
<!-- If you are interested in doing something just after a plugin has been activated it is important to note that the hook process performs an instant redirect after it fires.-->   
 
<!-- If you are interested in doing something just after a plugin has been activated it is important to note that the hook process performs an instant redirect after it fires.-->   
So it is impossible to use <tt>[[関数リファレンス/add_action | add_action()]]</tt> or <tt>[[関数リファレンス/add_filter | add_filter()]]</tt> type calls until the redirect has occurred (e.g., only two hooks are fired after the plugin's activation hook: <tt>[[Plugin_API/アクションリファレンス/activated_plugin | 'activated_plugin']]</tt> and <tt>[[Plugin_API/アクションリファレンス/shutdown | 'shutdown']]</tt>).  A quick workaround to this quirk is to use <tt>[[Function_Reference/add_option | add_option()]]</tt> like so:
 
  
 +
リダイレクトが発生するまで、 <tt>[[関数リファレンス/add_action | add_action()]]</tt> または <tt>[[関数リファレンス/add_filter | add_filter()]]</tt>タイプ呼び出しを使用することは不可能です
 +
 +
'activated_plugin」と「シャットダウン」のみ2つのフックは、プラグインの起動フックの後に解雇されています)。
 +
 +
<tt>[[Plugin_API/アクションリファレンス/activated_plugin | 'activated_plugin']]</tt> と <tt>[[Plugin_API/アクションリファレンス/shutdown | 'shutdown']]</tt>の2つのフックをプラグインの起動フックの後に実行されています。
 +
 +
(e.g., only two hooks are fired after the plugin's activation hook: <tt>[[Plugin_API/アクションリファレンス/activated_plugin | 'activated_plugin']]</tt> and <tt>[[Plugin_API/アクションリファレンス/shutdown | 'shutdown']]</tt>).
 +
 +
このひねりへの迅速な回避策は、次のように[[関数リファレンス/add_option | add_option()]] /[[:en:Function_Reference/add_option | en]]を使用することです。:
 
<pre>
 
<pre>
 
/* メインプラグインファイル */
 
/* メインプラグインファイル */
69行目: 101行目:
 
</pre>
 
</pre>
  
You can check out the full post @ http://stackoverflow.com/questions/7738953/is-there-a-way-to-determine-if-a-wordpress-plugin-is-just-installed/13927297#13927297.
+
投稿全体をチェックアウトすることができます @ http://stackoverflow.com/questions/7738953/is-there-a-way-to-determine-if-a-wordpress-plugin-is-just-installed/13927297#13927297.
  
However, it '''is''' possible to use <tt>[[Function_Reference/do_action | do_action()]]</tt>, like this:
+
しかし、このような、<tt>[[関数リファレンス/do_action | do_action()]]</tt>を使用することが可能です。:
  
 
<pre>
 
<pre>
81行目: 113行目:
 
</pre>
 
</pre>
  
Included plugin files and even other plugins ''will'' be able to hook into this action.
+
含まれるプラグインファイル、さらには他のプラグインは、このアクションにフックすることができるようになります。
 +
 
 
<div id="Notes">
 
<div id="Notes">
  

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://goo.gl/rJHinX

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

外部リソース

更新履歴

  • 新規導入: 2.0

ソースファイル

register_activation_hook()wp-includes/plugin.phpにあります。


関数リファレンステンプレートタグ目次もご覧ください。


最新英語版: WordPress Codex » Function_Reference/register_activation_hook最新版との差分