私はカスタムURLの書き換えを追加するために私のwordpressのプラグインでこのコードを持っています:
add_action('init', function() {
add_rewrite_rule( '^cities/(.*)/browse/(.*)/(.*)/(.*)/(.*)',
'index.php?city_name=$matches[1]&cat_name[]=$matches[2]&cat_name[]=$matches[3]&cat_name[]=$matches[4]&cat_name[]=$matches[5]',
'top' );
add_rewrite_rule( '^cities/(.*)/browse/(.*)/(.*)/(.*)',
'index.php?city_name=$matches[1]&cat_name[]=$matches[2]&cat_name[]=$matches[3]&cat_name[]=$matches[4]',
'top' );
add_rewrite_rule( '^cities/(.*)/browse/(.*)/(.*)',
'index.php?city_name=$matches[1]&cat_name[]=$matches[2]&cat_name[]=$matches[3]',
'top' );
add_rewrite_rule( '^cities/(.*)/browse/(.*)',
'index.php?city_name=$matches[1]&cat_name[]=$matches[2]',
'top' );
add_rewrite_rule( '^cities/?([^/]*)/browse',
'index.php?city_name=$matches[1]',
'top' );
flush_rewrite_rules(true);
}, 10, 0);
どうやって(.*)/(.*)/(.*)/(.*)
を書き換えて$matches
を配列として得ることができますか? $matches
の最初の要素はcity_name変数値で、残りの要素はcat_name配列要素です。
今はすべてうまくいきますが、コードはもっと小さくてもかまいません。
すべての部分が?
でオプションであるので、それらすべてを支配するための1つの規則を取得します。
add_rewrite_rule(
'^cities/(.*)/(browse)?/?(.*)?/?(.*)?/?(.*)?/?(.*)?/?',
'index.php?city_name=$matches[1]&cat_name[]=$matches[3]&cat_name[]=$matches[4]&cat_name[]=$matches[5]',
'top'
);
しかし[]
はWordPressロジックでは動作しないため、書き換えタグを数字で定義する必要があります。試してみてください。
add_rewrite_tag("%cat_name.%", "([^&]+)");
add_rewrite_rule(
'^cities/([^/]*)/(browse)?/?([^/]*)?/?(^/)?/?([^/]*)?/?([^/]*)?/?',
'index.php?city_name=$matches[1]&cat_name1=$matches[3]&cat_name2=$matches[4]&cat_name3=$matches[5]',
'top'
);