MENU

プラグインの研究:Absolute Privacyを読んでみる4:プラグインはなぜ動くのか

2010 11/24

前回は、フォームを見て、どんな画面に対する処理なのかを把握しましたが、次は、定義されたプラグインがどのように実行されるのかを見ます。

どのプラグインでも共通の方法があると思われます。

調べた過程を書いていきます。

プラグインを有効にする

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が自動生成してユーザにメールをしますが、そこを書き換えるしょりです。

というわけで、次回以降、プラグインの本体である実際に実行される関数の定義を見ていきます。

この記事が気に入ったら
フォローしてね!

著者について

コメント

目次
閉じる