僕がWordPressを始めた頃に分かんなかったベーシックなところを分かりやすく説明する試み

2011年11月11日、ネスト赤羽というインキュベーション施設の一室で、WordPressについてお話させて頂きました。(勉強会サイトのレポート

試みの中身

タイトルは「テンプレートタグの使い方」的なものですが、メインにお伝えしようとしたのは、

  • WordPressって、どうやって動いてるの?
  • phpとhtmlの関係ってどうなってるの?
  • データベースの役割って?
  • サーバってそもそもなんなのさ

といった内容です。

続きを読む 僕がWordPressを始めた頃に分かんなかったベーシックなところを分かりやすく説明する試み

WordPressのコアファイルの仕組み。3ステップでざっくりまとめ。

WordPressをダウンロードすると入っているたくさんのファイル、どんな構成になっていて、それらがどんなふうに動いているのか、まずは図を見てください。

クリックして拡大してみてください。

3ステップで理解する

ステップ1:3つのフォルダをおさえる

  • 管理画面を表示させているwp-adminフォルダ
  • 一番馴染みの深いwp-contentフォルダ(テーマやプラグイン!)
  • 色んな関数やapiが詰まっているwp-includesフォルダ

それぞれのフォルダの中にも、かなりたくさんのファイルが入ってますが、ここはヒトカラゲにざっくり捉えます。

ステップ2:ブログのトップページが表示されるフローをおさえる

ユーザがブログのトップページに訪れたときに、だいたいどんな処理が行われているのか、それが図の下半分です。
ひとつずつ読んでけば大丈夫です。

この記事の最後に、それぞれのファイルを読んでみた記事のリストがあります。

ステップ3:その他のファイルを覗いてみる

wp-login.phpはユーザ登録、wp-mail.phpは多分メール制御、などですが、ファイルを開いてみると最初にコメントで大体の機能を説明しているので、把握する。

という感じです!

各ファイルの詳細記事案内

上の図に登場するファイルをひとつひとつ読んできました。
それぞれ記事になっていますので、よろしければどぞ!

フロー図に載っているもの(ステップ2のあたり)

WordPressが動くようになるまでを、1ファイルずつ丁寧に見てます。

その他、重要そうなファイル

上のフロー図には登場してないけど、勉強すると理解が深まります!

以上です。

プラグインの研究:Absolute Privacyを読んでみる5:メンバ関数を全部読む

というわけで、一行目に戻って、プラグインの中の様々な関数の定義を読みます。

あと、前回勉強したプラグインがどうして動くのか?については、WordPress プラグイン作成時のノウハウがとっても分かりやすかったので、おすすめです。
この後編を読んで分かったのですが、

add_action( 'register_form', array(&$absolutePrivacy, 'registrationBox'));

の2個目の引数は、クラスを利用しているのでこういう書き方になっているのですね。

クラスの定義

if (!class_exists("absolutePrivacy")) {
class absolutePrivacy {

absolutePrivacyというクラスが存在していなければ、以下定義します。
続きを読む プラグインの研究:Absolute Privacyを読んでみる5:メンバ関数を全部読む

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

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

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

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

プラグインを有効にする

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

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

プラグインの研究:Absolute Privacyを読んでみる3:まずはフォームから

PHPのファイルを読むのって、効率の方法があるのだろうか。今回は、頭からではなく、フォームからやってみます。

管理画面のフォーム

続きを読む プラグインの研究:Absolute Privacyを読んでみる3:まずはフォームから