前回は、フォームを見て、どんな画面に対する処理なのかを把握しましたが、次は、定義されたプラグインがどのように実行されるのかを見ます。
どのプラグインでも共通の方法があると思われます。
調べた過程を書いていきます。
プラグインを有効にする
if (isset($absolutePrivacy)) { register_activation_hook(__FILE__, array(&$absolutePrivacy, 'createRole')); //adds role on activation register_deactivation_hook(__FILE__, array(&$absolutePrivacy, 'destroyRole')); //removes role on deactivation
プラグイン有効化時に実行される関数の登録
関数リファレンス/register activation hookによれば、
関数register_activation_hook(WordPress2.0より導入)はプラグインが有効化されたときに実行される関数を登録します。
とあります。
register_activation_hookの使い方
使用方法として、
<?php register_activation_hook($file, $function); ?>
とあり、
$fileにはプラグインのフルパス、
$functionにはプラグインが有効化されたときに実行される関数、を入れます。
Absolute Privacyでは、
register_activation_hook(__FILE__, array(&$absolutePrivacy, 'createRole'));
とあるので、このファイルへのフルパス(__FILE__)にあるcreateRole関数を実行します。
createRole()の定義は後々見ていきます。
プラグインフックについて
次に、add_action()やadd_filter()、do_action()、apply_filters()って何?について理解したい。
Absolute Privacy内で使われているところ
if( isset($_GET['action']) && ($_GET['action'] == 'register') ) add_action( 'login_head', array(&$absolutePrivacy, 'regCSS')); //adds registration form CSS add_action( 'register_form', array(&$absolutePrivacy, 'registrationBox')); //adds password field to registration box add_filter( 'registration_errors', array(&$absolutePrivacy, 'checkRegErrors')); //adds registration form error checks add_action('user_register', array(&$absolutePrivacy, 'addNewUser')); //adds registration info to database add_action('admin_menu', array(&$absolutePrivacy, 'installOptionsMenu')); //install the options menu add_action('admin_menu', array(&$absolutePrivacy, 'moderateMenu')); add_action('template_redirect', array(&$absolutePrivacy, 'lockDown')); add_filter('the_content', array(&$absolutePrivacy, 'check_is_feed')); add_action('init', array(&$absolutePrivacy, 'adminLockDown'), 0); add_action('login_head', 'rsd_link');
add_action()とadd_fliterがあります。
コーデックス
CODEXのプラグインの作成> WordPress プラグイン・フック を見ると、
多くのプラグインが、WordPress 用プラグインフックと1つ以上接続することで、目的を果たしています。プラグインフックが動く方法は、WordPress が走る間のさまざまなタイミングで、いずれかのプラグインがその時点で走る関数を登録していないかを WordPress が確認し、もしあればその関数を走らせることによります。これらの関数は、WordPress のデフォルトの振舞いを変更します。
とあります。
図表
WordPress プラグイン作成前の基礎知識のページに、こんな図がありました。
add_action()とadd_fliter()は両方ともプラグインの実行
コーデックスの該当部分を見ると、
add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );
とあり、
- hook_name
- WordPress によって提供されているアクションフックの名称で、関数がどのイベントと関連するのかを示す。WP自体に埋め込まれた、ここのタイミングだよのサイン。
- your_function_name
- hook_name で設定されたイベントに続いて実行させたい関数の名前。標準の PHP 関数、WordPress コアに含まれる関数、プラグインファイルで定義した関数が使える。
- priority
- 特定のアクションに関連した関数の実行時の順番を指定。数字を入れます。
- accepted_args
- 関数が取ることのできる引数の数を定義
なので、どこで(hook_name)、何を(your_function_name)を実行するということになります。
Absolute Privacyの
add_action( 'register_form', array(&$absolutePrivacy, 'registrationBox'));
では、WPの処理中のdo_action(‘register_form’);が書きこまれた箇所で、array(&$absolutePrivacy, ‘registrationBox’)の処理を付け加える感じです。関数に配列が指定されているのが謎ですが、そういう風に定義しているのでしょう。あとで見ます。
ちなみに、do_action(‘register_form’);は、wp-login.phpの476行目にありました。
この記事の、case ‘register’ :のとき、つまりWordPressへのユーザ登録アクションの際に、実行されます。
普通だと、ユーザ登録時のパスワードは、WPが自動生成してユーザにメールをしますが、そこを書き換えるしょりです。
というわけで、次回以降、プラグインの本体である実際に実行される関数の定義を見ていきます。
コメント
コメント一覧 (1件)
[…] https://nskw-style.com/2010/wordpress/absolute-privacy-03.html https://nskw-style.com/2010/wordpress/absolute-privacy-04.html […]