2016.04.08この記事は約11分で読めます。TinyWPDKは、WordPressのアクションやフィルターをわかりやすく管理するための非常に小さなプログラムです。テーマを開発するとき、通常はfunctions.phpにアクションやフィルタを定義しますが、TinyWPDKでは、クラスベースでクエリタイプ(WordPressのis_pageやis_singleなどで区別されるタイプ)に応じて呼び分けすることができます。クエリタイプや個別のページ、タグなどアクションやフィルター別に分類して管理できるため、リクエストごとに細かい制御が可能です。関数指定ダウンロードインストールダウンロードリンクからソースを落として、適当な場所に展開してください。使用するテーマディレクトリ下に展開します。展開すると以下のような階層構造になっています。controllerディレクトリには、Webサーバーのプロセスで書き込み権限を設定します。以下のphpファイルをテーマのfunctions.php内でインクルードします。tiny-wpdkは、parse_queryアクション(管理画面は、after_setup_themeアクション)のタイミングで初期化されます。'/tiny-wpdk/tiny-wpdk.php';アクションやフィルタの呼び出し順については、以下の公式ドキュメントを参照してください。初期化オプション起動時に以下のようなオプションが用意されています。DEVELOPMENTモードでは、クラス情報のキャッシュを利用しません。毎回クラスのメソッドからアクションやフィルタに該当するインスタンスメソッドを探索し、add_actionやadd_filterを呼び出します。falseだと、Controller階層の探索を行ないません。クラス名が重複する場合などに利用します。falseだと、Controller階層の探索を行ないません。クラス名が重複する場合などに利用します。?>各種フックのためのController各種フックのためのControllerを作成します。デフォルトでは、展開したtiny-wpdkディレクトリ下のcontrollerディレクトリにファイルを作成します。ソースアーカイブには、最初から一通りのコントローラクラスが用意されているので、必要なアクションやフィルタ定義をすぐに追加していくことができます。コントローラの実装は以下のようになります。something}}TinyWPDK_Controllerを継承します。initは、parse_queryアクションのタイミングで初回のみ呼ばれます。アクションやフィルタはクラスのインスタンスメソッドとして定義します。アクションやフィルタの定義アクションやフィルタのためのメソッドは、以下の正規表現ルールに従って定義します。\Awp_(?P<type>action|filter)__(?P<hook>[a-z][a-z_]*[a-z])(?:_(?P<priority>[0-9]+(m|p)?))?(?:_args_(?P<args>[0-9]+))?1\Awp_(?P<type>action|filter)__(?P<hook>[a-z][a-z_]*[a-z])(?:_(?P<priority>[0-9]+(m|p)?))?(?:_args_(?P<args>[0-9]+))?例えば、pre_get_postsやparse_queryをadd_xxx関数で定義した場合との対応は以下のようになります。1);アクションの場合は、wp_action__で、フィルタの場合は、wp_filter__で始まります。その後、「イベント名_優先度_args_引数」の数と続きます。優先度や引数定義は任意です。デフォルトで、優先度は10、引数の数は1にセットされています。これは、WordPressのadd_actionやadd_filterのデフォルト引数の値と同じです。priorityに負数を指定したい場合は、以下のようにmをつけます。1);Controllerの優先度TinyWPDKは、WordPressのクエリのタイプから該当するControllerを探索していきます。各リクエストタイプとの対応および探索順は以下のようになります。最初に見つかったControllerクラスが呼ばれます。これは、WordPressのテンプレート階層の探索順と類似しています。SinglePostSingleSingularIndexDefault固定ページPage{pagename}Page{ID}PageSingularIndexDefaultサイトフロントページFrontPageHomeIndexDefaultまたはFrongPage固定ページプロセスフロントページ:固定ページ&ページフロントがページHomeIndexDefaultコメントポップアップページCommentPopupIndexDefault404エラーぺージHTTP404IndexDefault404ページの場合、最も遅い404の検出のタイミングが$wp->query()の後になるため、通常のページのプロセスが最初に実行されます。AdminControllerに限られます。something}}FirstControllerparse_queryアクション以前のアクションやフィルタをキャッチするには、FirstControllerを使います。FirstControllerは、デフォルトではafter_setup_themeアクションのタイミングで初期化されます。クエリの履歴pre_get_postsやthe_postsが呼ばれた回数を保存することができます。一度読み込まれたクラスのメタデータはファイルにキャッシュされます。アクションやフィルタを追加した時は、キャッシュファイルを削除します。デフォルトでは、tiny-wpdk/controller/hooksにあります。controllerディレクトリの下に生成されます。テンプレートコントローラ内でメンバ変数として定義した変数は、デフォルトでテンプレートに引き継がれます。?>ただし、header.phpやfooter.php、sidebar.phpのようなテンプレート階層に含まれないテンプレートに関しては、以下の関数で値の取得が可能です。?>テンプレートへのフックを停止したい場合は、以下のオプションを設定します。false;}}テンプレートフックの停止をした場合、コントローラのメンバ変数をテンプレートで利用するには、以下が使えます。?>やや高度なテンプレート昨今のWebアプリケーションフレームワークのテンプレートエンジンのように、ちょっとしたレイアウト機能も使えます。layout.phpという名前のテンプレートがテンプレートディレクトリにある場合、レイアウトファイルを使ってコンテンツを出力します。?>また、Controllerの階層と同様にlayoutもページタイプによって使い分けることが可能です。Controllerの階層と同様な探索順でlayoutのテンプレートを探します。最初に見つかったものが利用されます。任意のテンプレートは以下のようにして出力可能です。Controllerで設定したパラメータも同様にテンプレートの中から利用可能です。?>上記では、get_header関数でなくTinyWPDKの機能を使ってテンプレートを呼び出しています。処理の内容的には大きな違いはありませんが、get_header関数の中で呼び出しているfilter等の処理は上記では実行されません。テンプレート出力で特定のレイアウトを使いたい場合は、以下のようにできます。?>複数の指定したレイアウト候補からレイアウトを選択したい場合は以下のようにします。?>フラグメント任意のコンテンツブロックを別のテンプレートで使用したい場合は、以下のようにできます。このコンテンツは、別のテンプレートで使いたいと思います。?>このコンテンツは、別のテンプレートで使いたいと思います。?></div>同じ名前で続けて登録したい場合はappendを指定できます。?></ul>その他のrenderrenderIn、renderIfNotExistは通常のrenderと少し異なります。renderInは、該当のテンプレートを出力してendで囲まれるフラグメントを評価します。{{}}は、プレースホルダとして置換されます。?>renderIfNotExistは、テンプレートが存在しない場合のみ、endで囲まれるフラグメントを評価します。articleが存在しない場合、このメッセージが表示されます。?>articleが存在しない場合、このメッセージが表示されます。管理画面でメニューを作成するにはwordpressの関数admin_xxx_pageを使いますが、TinyWPDKでは以下のようにもできます。'submenu'))->register();AdminControllerの中では、もう少し簡単に作成できます。'AdminMainMenuController'));}}addHandlerにはリクエストを処理するコントローラを指定します。コントローラとビューhandlerに指定されたコントローラは、_actionパラメータの値に応じて呼びされるメソッドが特定されます。beforeやafterは各アクションが処理される前後で呼ばれます。$this->render('index');}}管理画面でのテンプレートはadminディレクトリ下に作成します。上記ではindexアクション内でindexテンプレートを描画するように指定しているのでadmin/index.phpがテンプレートとして出力されます。admin/layout.phpがあれば、レイアウトが有効になります。type="submit">Submit</button></form>Interceptorアクションやフィルタの呼び出しを中継します。アクションやフィルタの前後に色々な処理を実行することができます。インターセプタにはクラスまたは関数を指定することができます。デバッグ時などに便利です。アクションやフィルタが呼ばれる直前に呼ばれる。アクションやフィルタの呼び出し後に呼ばれる。$resultは、通常フィルタの戻り値が渡される。アクションやフィルタが呼ばれる直前に呼ばれる。アクションやフィルタの呼び出し後に呼ばれる。$resultは、通常フィルタの戻り値が渡される。$result;}}アクションやフィルタの実際の処理は、invokeというメソッドで呼び出されます。明示的に実行したい場合は、以下のようにします。$this->invoke();1$this->invoke();beforeメソッドでfalseを返すと、以降のInterceptorは実行されません。アクションやフィルタ自体は実行されます。関数の場合は、Interceptorのオブジェクトとアクションやフィルタに渡される引数が渡されます。関数の場合は、明示的にinvokeを呼ぶ必要があります。$result;}$directionがbeforeのとき、関数の返り値でfalseを指定すると後続のInterceptorは実行されません。ダウンロード以下の規約のもと、ご自由にご利用ください。規約ご利用は自己責任にてお願いいたします。バックアップは必ずお取りください。如何なる不具合やトラブル、損害についても責任を負いかねますのでご了承ください。こちらに移動しました。名前:moritetuITエンジニア地方でITエンジニアをしています。Webやスマフォアプリ、Hadoopなどのビッグデータに関するシステムに関わり、現在は企画開発の業務をしています。(必須)サイトタイトルとURLをコピーしました。