WordPressの固定ページに不特定多数の階層下URLのページを作る事ってできない?

functions.phpでURLの認識ルールを追加してやろう。

001WordPressで作成しているサイトに独自の機能のページを追加したければ、固定ページを作成して対応するテーマファイルに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']」などから取得するより手軽だ。


001

処理を記述したfunctions.phpをアップロードして、管理画面の「設定」→「パーマリンクの設定」で「変更を保存」ボタンを押すと、URLの認識設定が反映されるぞ。

2016年05月01日 16時39分
©教えて君.net All Rights Reserved.