WordPress – 公開画面にMVC風のルーティングを設定する

皆さんこんにちは。

今回はWordpressの公開画面において他のPHPフレームワークのようにMVC風のフロントルーティングを適用したいと思い独自にカスタマイズをしたのでご紹介したいと思います。
もしswitch文で静的ルーティングしか実装できていない方やもっと動的ルーティングだったりフルルーティングをしたいといった方にかなりお勧めです。

静的パスはもちろん、動的パスにも対応した仕組みとなっているので汎用性的にも便利かなと思います!

ルーティングの処理を実装

今回はルーティングの処理を2つの用途に分けて実装していきます。
まずはルートを処理するファイルです。

※Route.phpというファイル名で作成しています。

メインとなるルーティングの処理を作成しました。
基本的な使い方は”add”メソッドを呼び出しルートと関数を設定する仕組みになります。

続いてルートを追加し対象のルートに対して関数を実行するファイルを作成していきます。

※Routing.phpというファイル名で作成しています。

こちらは主にルートを追加しそのルートへのアクセスがあった場合に実行する関数を設定します。
静的パラメーターはそのままURLのパスを指定し呼び出す関数を設定します。
動的パラメーターの場合は”Route.php”の設定にもよりますが、ご紹介したものだと頭に”:”コロンを追記して動的に対応できるようにします。

動的化したいパスがある場合は”where”メソッドを別途呼び出し、対象のルートを第1引数に指定し第2引数に”:”コロンを除外した文字列を指定し第3引数にパターンにマッチさせたい条件を指定します。

マッチした値がリクエストのパスに存在していると対象の関数が呼び出され可変変数で引数として受け取れるようになっています。

まさにMVC風なルーティングの設定方法となっていますよね。

次は実際にこのルーティング設定が使えるようフックを追加していきます。

WordPressに必要なフックを追加する

まずはWordpressに必要なアクションフックやフィルターフックを追加していきます。
ご自身の各テーマ内にある”function.php”に以下を追記していきます。

フックに関する説明は省きますが、追加したコード内を解説します。

rewrite ルールの追加

add_rewrite_rule()という関数を使って独自のURLに沿ったrewriteルールを設定します。
今回追加したrewriteルールは”path/to/”以降のURLに対してパターンに沿ったリクエストが来た場合”my_action”というパラメーターでマッチした値を受け取ることができます。
“my_action”はお好みに合わせて設定を変更してください。

queryの許可

WordPressのデフォルトでは独自に追加したqueryはグローバル変数の”query_vars”に許可がされないため先ほど追加した”my_action”というパラメーターも取得できなくなってしまいます。
取得できるように”my_action”というパラメーターを許可しておきます。

templateの制御

WordPressのデフォルトでは受け取ったリクエストに対してテーマ内に存在するファイルを優先順位をもとにテンプレートが読み込まれ出力されます。
リクエストを受け取りテンプレートが出力するまでの中間処理を追加するためにtemplateの制御を設けます。

※Routingクラスは先ほど作成したRouting.phpを読み込ませる必要があります。

ルーティングがうまく動かない時

ここまでご紹介した設定を追加してもうまく動作しない場合はWordpressのパーマリンク設定を見直してみてください。

パーマリンクの設定を”基本”に設定している場合そもそもhtaccessのrewrite_ruleが記述されません。
今回のルーティング方法を活用するためには少なくとも”基本”以外のパーマリンクに設定する必要があります。

最後に

いかがでしたでしょうか。
この記事を書く前に最初はswitch文を使ったルーティングをしていたんですが、やはり動的にも対応したいなと思いわりと使い勝手も良かったので今回ご紹介させていただきました。

フレームワークに慣れている方だと感覚的にもわかりやすいものになっているのでぜひ試してみてください。

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