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

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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(使用例: Process Flow)
(注意点: 更新履歴、外部リソース追加)
124行目: 124行目:
 
これに関する詳しい情報はこちら: http://wordpress.org/support/topic/201309
 
これに関する詳しい情報はこちら: http://wordpress.org/support/topic/201309
  
 +
<div id="Resources">
 +
== 外部リソース ==
 +
</div>
 +
 +
* [http://solislab.com/blog/plugin-activation-checklist/ 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
 +
 +
<div id="Changelog">
 +
== 更新履歴 ==
 +
</div>
 +
 +
* [[Version 3.1|3.1]] : This hook is now fired only when the user activates the plugin and not when an automatic plugin update occurs ([http://core.trac.wordpress.org/ticket/14915 #14915]).
 +
** [http://wpdevel.wordpress.com/2010/10/27/plugin-activation-hooks-no-longer-fire-for-updates/ Plugin activation hooks no longer fire for updates « WordPress Development Updates] (2010-10-28)
 +
** [http://wpdevel.wordpress.com/2010/10/27/plugin-activation-hooks/ Plugin activation hooks « WordPress Development Updates] (2010-10-27)
 +
 +
* 新規導入: [[Version 2.0|2.0]]
 +
 +
<div id="Source File">
 +
== ソースファイル ==
 +
</div>
 +
 +
<tt>register_activation_hook()</tt> is located in {{Trac|wp-includes/plugin.php}}
 
<div id="Related">
 
<div id="Related">
 +
 
==関連情報==
 
==関連情報==
 
</div>
 
</div>

2015年5月15日 (金) 09:12時点における版

関数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を使うよりも信頼性の高い方法です。

Process Flow

このページ「関数リファレンス/register activation hook」は一部未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています

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 add_action() or add_filter() type calls until the redirect has occurred (e.g., only two hooks are fired after the plugin's activation hook: 'activated_plugin' and 'shutdown'). A quick workaround to this quirk is to use add_option() like so:

/* Main Plugin File */
...
function my_plugin_activate() {

  add_option( 'Activated_Plugin', 'Plugin-Slug' );

  /* activation code here */
}
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' );

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.

However, it is possible to use do_action(), like this:

function my_plugin_activate() {

     do_action( 'my_plugin_activate' );
}
register_activation_hook( __FILE__, 'my_plugin_activate' );

Included plugin files and even other plugins will be able to hook into this action.

注意点

  • 稼働するコードを例として挙げている関連トピック: 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() is located in wp-includes/plugin.php

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