WordPressでは任意のURLをパーマリンクとして設定できる。ただし、内部構造上、index.phpにパラメータを渡す際、パーセントエンコードが必要な文字列はURLに使えない。
たとえば、特定のディレクトリ以下にあるページ群というような固いで、aaa/bbb、aaa/cccというパーマリンクでページを作成したいとする。そのような場合は、aaaに対して特殊な設定をしておけば対応できる。具体的には、以下のようなrewriteのルールをテーマのための関数 (functions.php)に追加しておく。
add_rewrite_rule( '^aaa/(.*)$', 'index.php?name=aaa%2F$matches[1]', 'top');
複雑な制御をしている場合は、正規表現マッチのところを[^/]*などと/を排他したほうがいいかもしれないが、全アクセスが評価される、それなりに負荷にもなる部分なので、気楽なマッチぐらいが妥当か。
add_rewrite_ruleを記載したら、そのルールを登録しておかないといけない。具体的には、
global $wp_rewrite;
$wp_rewrite->flush_rules(1);
のような記述も必要になる。ただし、これは一度実行しておけばよく、重い処理なので、一度これを記載してページを読み込んだら、コメントアウトしておくのが良い。
もしくは、flush_rewrite_rulesを使う方法もある。
add_action('init', function(){ flush_rewrite_rules(false); });
これらルール変更の登録方法としては、プラグインのRewrite Rules Inspectorを使う方法がお勧めだ。Rewrite Rules Inspectorを導入すると、rewirteのルールが一覧できる。
add_rewrite_ruleを変更したら、このボタンをぽちっと押して登録、状態を確認するといった作業が良いだろう。
入力時のフィルタ除去
パーマリンクを入力する際、sanitize_title_with_dashesフィルタによって/は入力できない。これを削除すれば入力が可能になる。