TinyWPDK

この記事は約11分で読めます。

Download TinyWPDK  Download TinyWPDK

TinyWPDKは、WordPressのアクションやフィルターをわかりやすく管理するための非常に小さなプログラムです。テーマを開発するとき、通常はfunctions.phpにアクションやフィルタを定義しますが、TinyWPDKでは、クラスベースでクエリタイプ(WordPressのis_pageis_singleなどで区別されるタイプ)に応じて呼び分けすることができます。また、クエリタイプや個別のページ、タグなどアクションやフィルター別に分類して管理できるため、リクエストごとに細かい制御が可能です。

tinywpdk-concept

インストール

ダウンロードリンクからソースを落として、適当な場所に展開してください。例えば、使用するテーマディレクトリ下に展開します。展開すると以下のような階層構造になっています。controllerディレクトリには、Webサーバーのプロセスで書き込み権限を設定します。

初期化

以下のphpファイルをテーマのfunctions.php内でインクルードします。tiny-wpdkは、parse_queryアクション(管理画面は、after_setup_themeアクション)のタイミングで初期化されます。

アクションやフィルタの呼び出し順については、以下の公式ドキュメントを参照してください。

プラグイン_API/アクションフック一覧

初期化オプション

起動時に以下のようなオプションが用意されています。DEVELOPMENTモードでは、クラス情報のキャッシュを利用しません。毎回クラスのメソッドからアクションやフィルタに該当するインスタンスメソッドを探索し、add_actionadd_filterを呼び出します。

各種フックのためのController

各種フックのためのControllerを作成します。デフォルトでは、展開したtiny-wpdkディレクトリ下のcontrollerディレクトリにファイルを作成します。ソースアーカイブには、最初から一通りのコントローラクラスが用意されているので、必要なアクションやフィルタ定義をすぐに追加していくことができます。

例えば、コントローラの実装は以下のようになります。

TinyWPDK_Controllerを継承します。initは、parse_queryアクションのタイミングで初回のみ呼ばれます。アクションやフィルタはクラスのインスタンスメソッドとして定義します。

アクションやフィルタの定義

アクションやフィルタのためのメソッドは、以下の正規表現ルールに従って定義します。

例えば、pre_get_postsparse_queryをadd_xxx関数で定義した場合との対応は以下のようになります。

アクションの場合は、wp_action__で、フィルタの場合は、wp_filter__で始まります。その後、「イベント名_優先度_args_引数」の数と続きます。優先度や引数定義は任意です。デフォルトで、優先度は10、引数の数は1にセットされています。これは、WordPressのadd_actionadd_filterのデフォルト引数の値と同じです。

priorityに負数を指定したい場合は、以下のようにmをつけます。

Controllerの優先度

TinyWPDKは、WordPressのクエリのタイプから該当するControllerを探索していきます。各リクエストタイプとの対応および探索順は以下のようになります。最初に見つかったControllerクラスが呼ばれます。これは、WordPressのテンプレート階層の探索順と類似しています。

アーカイブ

カテゴリーアーカイブ
  1. Category{slug}
  2. Category{ID}
  3. Category
  4. Archive
  5. Index
  6. Default
日付ページ
  1. Date
  2. Archive
  3. Index
  4. Default
タグアーカイブ
  1. Tag{slug}
  2. Tag{ID}
  3. Tag
  4. Archive
  5. Index
  6. Default

カスタム投稿タイプアーカイブ

  • {post_type}
  • PostTypeArchive
  • Archive
  • Index
  • Default

個別投稿ページ

  1. Single{slug}
  2. Single{ID}
  3. Single{post_type} or SinglePost
  4. Single
  5. Singular
  6. Index
  7. Default

固定ページ

  1. Page{pagename}
  2. Page{ID}
  3. Page
  4. Singular
  5. Index
  6. Default

サイトフロントページ

  1. FrontPage
  2. Home
  3. Index
  4. Default

または

  1. FrongPage
  2. 固定ページプロセス

フロントページ:固定ページ&ページフロントがページ

  1. Home
  2. Index
  3. Default

コメントポップアップページ

  1. CommentPopup
  2. Index
  3. Default

404エラーぺージ

  1. HTTP404
  2. Index
  3. Default

404ページの場合、最も遅い404の検出のタイミングが$wp->query()の後になるため、通常のページのプロセスが最初に実行されます。

添付ファイル表示

  1. {MIME_TYPE} 例:text/plainの場合
    1. MimeTypeText
    2. MimeTypePlain
    3. MimeTypeTextPlain
  2. SingleAttachment
  3. Single
  4. Index
  5. Default

検索結果ページ

  1. Paged
  2. Search
  3. Index
  4. Default

Robots

  1. Robots
  2. Index
  3. Default

Feed

  1. Feed
  2. Index
  3. Default

Trackback

  1. Trackback
  2. Index
  3. Default

Embed

  1. Embed{post_type}
  2. Embed
  3. Index
  4. Default

管理画面

管理画面は、AdminControllerに限られます。

FirstController

parse_queryアクション以前のアクションやフィルタをキャッチするには、FirstControllerを使います。FirstControllerは、デフォルトではafter_setup_themeアクションのタイミングで初期化されます。

クエリの履歴

pre_get_postsやthe_postsが呼ばれた回数を保存することができます。

アクションやフィルタの情報

一度読み込まれたクラスのメタデータはファイルにキャッシュされます。アクションやフィルタを追加した時は、キャッシュファイルを削除します。デフォルトでは、tiny-wpdk/controller/hooksにあります。controllerディレクトリの下に生成されます。

テンプレート

コントローラ内でメンバ変数として定義した変数は、デフォルトでテンプレートに引き継がれます。

ただし、header.phpやfooter.php、sidebar.phpのようなテンプレート階層に含まれないテンプレートに関しては、以下の関数で値の取得が可能です。

テンプレートへのフックを停止したい場合は、以下のオプションを設定します。

テンプレートフックの停止をした場合、コントローラのメンバ変数をテンプレートで利用するには、以下が使えます。

やや高度なテンプレート

昨今のWebアプリケーションフレームワークのテンプレートエンジンのように、ちょっとしたレイアウト機能も使えます。layout.phpという名前のテンプレートがテンプレートディレクトリにある場合、レイアウトファイルを使ってコンテンツを出力します。

また、Controllerの階層と同様にlayoutもページタイプによって使い分けることが可能です。Controllerの階層と同様な探索順でlayoutのテンプレートを探します。最初に見つかったものが利用されます。

例:カテゴリーアーカイブの場合

  1. layout-category-{slug}
  2. layout-category{ID}
  3. layout-category
  4. layout-archive
  5. layout-index
  6. layout-default
  7. layout

テンプレートの出力

任意のテンプレートは以下のようにして出力可能です。Controllerで設定したパラメータも同様にテンプレートの中から利用可能です。

上記では、get_header関数でなくTinyWPDKの機能を使ってテンプレートを呼び出しています。処理の内容的には大きな違いはありませんが、get_header関数の中で呼び出しているfilter等の処理は上記では実行されません。

また、テンプレート出力で特定のレイアウトを使いたい場合は、以下のようにできます。

複数の指定したレイアウト候補からレイアウトを選択したい場合は以下のようにします。

フラグメント

任意のコンテンツブロックを別のテンプレートで使用したい場合は、以下のようにできます。

同じ名前で続けて登録したい場合はappendを指定できます。

その他のrender

renderIn、renderIfNotExistは通常のrenderと少し異なります。

renderInは、該当のテンプレートを出力してendで囲まれるフラグメントを評価します。{{}}は、プレースホルダとして置換されます。

renderIfNotExistは、テンプレートが存在しない場合のみ、endで囲まれるフラグメントを評価します。

管理画面でのふるまい

メニュー作成

管理画面でメニューを作成するにはwordpressの関数admin_xxx_pageを使いますが、TinyWPDKでは以下のようにもできます。

AdminControllerの中では、もう少し簡単に作成できます。

addHandlerにはリクエストを処理するコントローラを指定します。

コントローラとビュー

handlerに指定されたコントローラは、_actionパラメータの値に応じて呼びされるメソッドが特定されます。beforeafterは各アクションが処理される前後で呼ばれます。

管理画面でのテンプレートはadminディレクトリ下に作成します。例えば、上記ではindexアクション内でindexテンプレートを描画するように指定しているのでadmin/index.phpがテンプレートとして出力されます。admin/layout.phpがあれば、レイアウトが有効になります。

Interceptor

アクションやフィルタの呼び出しを中継します。アクションやフィルタの前後に色々な処理を実行することができます。インターセプタにはクラスまたは関数を指定することができます。デバッグ時などに便利です。

クラス指定

アクションやフィルタの実際の処理は、invokeというメソッドで呼び出されます。明示的に実行したい場合は、以下のようにします。

beforeメソッドでfalseを返すと、以降のInterceptorは実行されません。ですが、アクションやフィルタ自体は実行されます。

関数指定

関数の場合は、Interceptorのオブジェクトとアクションやフィルタに渡される引数が渡されます。関数の場合は、明示的にinvokeを呼ぶ必要があります。

$directionbeforeのとき、関数の返り値でfalseを指定すると後続のInterceptorは実行されません。

ダウンロード

以下の規約のもと、ご自由にご利用ください。

規約

  • ご利用は自己責任にてお願いいたします。
  • バックアップは必ずお取りください。
  • 如何なる不具合やトラブル、損害についても責任を負いかねますのでご了承ください。

こちらに移動しました。2016/6/2

TinyWPDK
Download TinyWPDK for free. TinyWPDK is a tiny development kit for wordpress theme. TinyWPDK is a tiny development kit f...

Download TinyWPDK

タイトルとURLをコピーしました