WordPressで作成しているサイトに独自の機能のページを追加したければ、固定ページを作成して対応するテーマファイルにPHPプログラムを記述するのが手軽だ。
しかし、不特定多数のページを持つ機能を作るのは少々苦労する。標準状態のWordPressでは、「/mypage/subpage」のようなURLにアクセスしたとき、「mypage」の子ページである「subpage」という固定ページのURLと認識されてしまい、該当する固定ページが存在しなければエラーになってしまうのだ。
「/mypage?subpage」のようなクエリパラメータ付きURLなら、「mypage」という固定ページへのアクセスとして扱われるが、検索エンジンによる重要度の判定で不利になる可能性があるし、見た目にも格好悪い。
階層下URLを持つ固定ページを作りたければ、テーマディレクトリの「functions.php」にフィルタ処理を記述して、URLの認識ルールを追加してやろう。ついでに「query_vars」でパラメータ項目の定義を追加しておけば、追加のURLの部分を「get_query_var」関数で手軽に取得できるようになるぞ。
function query_vars_pathinfo($vars){ $vars[] = "path_info"; return $vars; } add_filter('query_vars','query_vars_pathinfo'); function my_page_permalink_pathinfo($rules){ return(array('mypage/(.+)'=>'index.php?pagename=mypage&path_info=$matches[1]')+$rules); } add_filter('rewrite_rules_array', 'my_page_permalink_pathinfo');
固定ページに不特定多数の子ページを持たせるには、functions.phpに上記のように記述しよう。
「query_vars」フィルタに割り当てた関数では、「path_info」というカスタムクエリ変数を登録。「rewrite_rules_array」フィルタでは、「mypage/」以下のURLを「mypage」という固定ページのURLへとして認識させるルールを登録している。「path_info」や「mypage」の部分は適宜変更しよう。
あとはテーマディレクトリに「page-mypage.php」のようなファイルを作り、ページの生成処理を記述すればいい。このPHP内では、「get_query_var('path_info')」のようにすることで「mypage/」より後ろのパスを取得できる。「$_SERVER['REQUEST_URI']」などから取得するより手軽だ。
処理を記述したfunctions.phpをアップロードして、管理画面の「設定」→「パーマリンクの設定」で「変更を保存」ボタンを押すと、URLの認識設定が反映されるぞ。