WordPressでパーマリンクにスラッシュ(/)を使うには?

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のルールが一覧できる。

rewite-rules-inspector

add_rewrite_ruleを変更したら、このボタンをぽちっと押して登録、状態を確認するといった作業が良いだろう。

入力時のフィルタ除去

パーマリンクを入力する際、sanitize_title_with_dashesフィルタによって/は入力できない。これを削除すれば入力が可能になる。

 詳細は、WordPressのPタグ、BRタグの自動整形に対処する参照