通常のパーマリンク設定では実現しない時に、このアドレスでアクセスした時に、このURLにアクセスするというようなリライト設定をする。
通常のリライト
こちらの場合管理画面上のパーマリンクの設定で保存をし直す必要がある
functions.php
add_rewrite_rule('posttype/([^/]+)/([^/]+)/?$', 'index.php?category_name=$matches[1]', 'top');
rewrite_rules_arrayで設定
複数のリダイレクト設定をする場合はこっちのが手っ取り早いかも
管理画面でのパーマリンク設定で保存をする必要はない。
functions.php
add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');
// ルールを追加するときはflush_rules()を忘れないように
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
// 新しいルールを追加
function wp_insertMyRewriteRules($rules)
{
$newrules = array();
$newrules['(project)/([^/]+)/?$'] = 'index.php?post_type=project&project_categoy=$matches[1]';
return $newrules + $rules;
}
// 変数idを追加して、WordPressが認識できるようにする
function wp_insertMyRewriteQueryVars($vars)
{
array_push($vars, 'id');
return $vars;
}
下記の設定は特に変える必要はないみたい。
functions.php
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');
下記の関数にルールを記述するとよいらしい。
functions.php
add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
リライトのルールの設定は基本的には正規表現を利用してリライトを指せる
() -> $matches[n] で引っ張れるのでまんま正規表現的に飛ばせる。
functions.php
// 編集するのはこの部分
$newrules['(project)/([^/]+)/?$'] = 'index.php?post_type=project&project_categoy=$matches[1]';
// 条件を増やしたいときはそのまま増やす。
$newrules['(project)/([^/]+)/?$'] = 'index.php?post_type=project&project_categoy=$matches[1]';
$newrules['(company)/([^/]+)/?$'] = 'index.php?post_type= company& company_categoy=$matches[1]';
// 配列でやっているので連想配列的に書くのもOK
$newrules = array(
'(project)/([^/]+)/?$' => 'index.php?post_type=project&project_categoy=$matches[1]',
'(company)/([^/]+)/?$' => 'index.php?post_type=company&company_categoy=$matches[1]',
);
まとめ
wordpressで思った通りのPathにならなかった場合はこういうふうにでも一応Pathを通すことができる
できる限りは、defaultでやったほうが、今後のカスタマイズ性能上がるのだろうけどもね。