j'ai ces codes dans mon plugin wordpress pour ajouter des réécritures d'URL personnalisées:
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);
comment puis-je réécrire (.*)/(.*)/(.*)/(.*)
et obtenir $matches
sous forme de tableau? Le premier élément de $matches
est la valeur de la variable nom_cité et le reste sont des éléments du tableau nom_cat.
maintenant tout fonctionne mais je sais que le code peut être beaucoup plus petit.
Avec toutes les parties facultatives avec ?
, vous obtenez une règle pour les gouverner toutes:
add_rewrite_rule(
'^cities/(.*)/(browse)?/?(.*)?/?(.*)?/?(.*)?/?(.*)?/?',
'index.php?city_name=$matches[1]&cat_name[]=$matches[3]&cat_name[]=$matches[4]&cat_name[]=$matches[5]',
'top'
);
mais le []
ne peut pas fonctionner avec la logique WordPress, vous devez donc définir la balise de réécriture avec un nombre. essayez ça:
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'
);