web-dev-qa-db-fra.com

add_rewrite_rule pour transmettre le chemin entier en tant que paramètre unique

Je veux réécrire une URL et passer le chemin entier en tant que paramètre. Quelque chose comme:

www.example.com/csearch/foo1/bar1/foo2/foo3/bar4 => www.example.com/index.php?page_id=23&csearch=foo1/bar1/foo2/foo3/bar4

Le script sur page_id 23 analysera le contenu de csearch.

Le chemin après/csearch/varie en longueur. Il peut avoir 0 ou 30 niveaux.

J'ai une solution de travail pour un seul niveau

www.example.com/csearch/foo1 => www.example.com/index.php?page_id=23&filter=foo1

fonctionne bien avec les éléments suivants ajoutés à functions.php

function create_new_url_querystring() {
    add_rewrite_rule('^csearch/([a-zA-Z-]*)/?$', 'index.php?page_id=23&filter=$matches[1]', 'top');
}
add_action('init', 'create_new_url_querystring');

Je crois que j'ai besoin d'une nouvelle expression rationnelle pour correspondre à tout le chemin, pas seulement au premier niveau.

Une idée sur la façon de résoudre mon problème?

Merci.

2
jdias

Un rapide Tweak à votre expression régulière. Vous ne capturez actuellement que des lettres avant le premier /

add_rewrite_rule('^csearch/(.*)$', 'index.php?page_id=23&filter=$matches[1]', 'top');

Notez lors de l'analyse que vous pouvez avoir ou non une barre oblique à la fin de votre valeur de filtre.

4
Joel