WordPressによるWEBサイト開発3 – プラグインの開発

ここでは通常のクライアントアプリのプラグイン開発と比較した上で、WordPress投稿本文中の「おはよう」という文字列を「Selamt pagi!」に変換する簡単なWordPressプラグインを作ってみます。

Asprovaのプラグイン開発

Standard EXE(オートメーションクライアント)はAsprovaの関数を任意のタイミングで呼び出しますが、DLL(プラグイン)はAsprovaのアクセスポイントのタイミングでフックされ呼び出されるイベントドリブン型です。

プラグインDLLはAsprova起動時にロードされ、AsDefaultクラスのAutoRegistration関数に、プラグインキー(アクセスポイント)に対応するフックとエントリ関数をマッピングすることで、イベント発生時にエントリ関数を実行します(「COMインターフェイスを通したAsprovaの機能の拡張」より)。

この例ではKeyHookGeneric(追加したコマンドが起動するタイミング)のアクセスポイントでプラグイン関数を実行します。

Factory1というプロジェクトのOverTimeクラスのAddOverTime関数を、Asprovaコアシステム内ロジックにあるKeyHookGenericというアクセスポイントのタイミングで実行するという意味になります。

WordPressのアクションフックとフィルターフック

WordPress本体(コアシステム)のロジック内に、do_actionとかapply_filterとかでキーが仕込んであるので、開発するプラグイン関数の中に、キーと紐付けするためのadd_actionとかadd_filterという命令を記述します。

WordPress本体でロジックが実行され動作するときには必ずアクションが起動され、出力がされる時には必ずフィルターが起動されます。

  • アクションフック(動作)
    1. WordPress本体 do_action($key, $args);
    2. プラグイン関数 function 関数1(){処理実行}
    3. フック add_action($key, 関数1);
  • フィルターフック(出力)
    1. WordPress本体 apply_filter($key, $value);
    2. プラグイン関数 function 関数2(){処理実行}
    3. フック add_filter($key, 関数2)

例えばアクセスポイントthe_contentで関数を実行させるプラグインを開発する場合、/wp/wp-content/plugins以下のプラグインフォルダの中に以下を実現するphpファイルを格納されます。

  1. プラグイン関数(function)
  2. フック(add_filter関数でWordPressアクセスポイントとプラグイン関数のマッピング)

WordPress本体のアクセスポイントにはapply_filters()関数でフックが埋め込まれていますので、アクセスポイントのタイミングでプラグインが実行されます。

これはテーマファイルであるfunctions.phpに関数を追加したのと同じことを、プラグインという形でパッケージ化していることになります。プラグインはテーマから分離されているのでテーマを替えても機能します。

functions.phpからアクセスポイントinitのタイミングで関数を実行

ユーザーのログインの有無はis_user_logged_in()関数で判断し、ログインしていない場合はauth_redirect()関数でログイン画面にリダイレクトさせます。

この処理をfunctions.phpからWordPress起動時に実行させれば全ページに適用され、header.phpにページの種類や投稿IDによってログインの有無をチェックさせれば会員制ページになります。

WordPressにアクセスしたユーザーがログインしているか否かを、wp-settings.phpのdo_action(‘init’)のタイミングでプラグインを実行させることで分岐させることができます。

functions.phpは、WordPressテンプレートファイルの中でもユーザー関数を集めた色違いですが、WordPress起動時にwp-settings.phpの中でインクルードされロードされます。

プラグインからアクセスポイントthe_contentのタイミングで投稿本文の文字列を置き換える

メタ情報・プラグイン関数・フィルターフックを記述したPHPファイルを/wp/wp-content/plugins/yamazou-plugin/selamat-pagi.phpにアップします。

/wp-includes/post-template.phpにコンテンツを表示するthe_content関数がありますが、ここにthe_contentというアクセスポイント(フック)がapply_filters()関数によって埋め込んであります。

やるべきことはthe_contentというアクセスポイントのタイミングで、実行させたい自前の関数を定義し、add_filter()関数でマッピングすることです。

後はプラグイン画面からおはようSelamat pagi!を有効化にするだけですが、phpファイルはUTF-8 BOMなしにしないと、プラグインメニューが文字化けします。

管理画面の作成(アクセスポイントadmin_menu)

「おはよう」と入力した場合に変換される文字を、管理画面からパラメータとして渡し自由に変更できるようにします。WordPress Codexによると管理メニューを作るには以下の3つが必要です。

  1. メニューを作成するコードを含んだ関数を作る
  2. “admin_menu”フックで作った関数を登録する
  3. メニューがクリックされたときに表示されるページのHTML出力を作る

次に管理画面のテキストボックスに入力された値をパラメータとして受け取り変換するよう修正します。

 

こんな投稿も読まれています