web-dev-qa-db-fra.com

Comment puis-je réécrire une URL 'page' en fonction de paramètres de chaîne de requête?

J'ai la page suivante qui contient un seul post et un certain nombre de commentaires:

http://monsite.com/tips

Lorsqu'un utilisateur poste un commentaire, j'y ajoute des méta-données afin de pouvoir filtrer les commentaires à l'aide de ces URL:
http: // mysite/tips? id = cat & filter_id = 1
http: // mysite/tips? id = dog & filter_id = 2

Je veux utiliser l'URL suivante à la place:
http: // mysite/tips/cat
http: // mysite/tips/dog

La page de conseils affiche une liste de publications en fonction des paramètres de chaîne de requête.

J'ai travaillé sur ce tutoriel, ce qui semblait être ce dont j'avais besoin, mais lorsque je tape mon URL, une erreur de page non trouvée s'affiche. http://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/

Est-ce possible?

1
user1491819

Vous pouvez ajouter une règle de réécriture telle que celle-ci. Assurez-vous d'enregistrer vos vars de requête publics auprès de WordPress afin qu'il reconnaisse vos vars de règles de réécriture.

add_rewrite_rule('^(tips)/([^/]*)/([^/]*)/?', 'index.php?name=$matches[1]&id=$matches[2]&filter_id=$matches[3]','top');

add_filter('query_vars', 'foo_my_query_vars');
function foo_my_query_vars($vars){
    $vars[] = 'id';
    $vars[] = 'filter_id';
    return $vars;
}

Visitez la page Paramètres de permaliens pour vider vos permaliens.

Vous pouvez accéder à vos variables comme suit:

$id = get_query_var('id');
$filter_id = get_query_var('filter_id');

Notez que vous souhaitez avoir deux variables dynamiques avec un segment d'URI qui ne fonctionneront pas du tout. La règle de réécriture ci-dessus fonctionne pour tips/cat/1 (1 étant filter_id).

Pour tester vos règles, je vous recommande vivement d'utiliser le Monkeyman Rewrite Analyzer .

J'espère que cela vous aide!

1
Brian Fegter

Vous pouvez utiliser la fonction add_query_arg:

add_query_arg('filter_id', 1);
add_query_arg('filter_id', 2);

Maintenant, les URL se lisent comme suit:

http://mysite/tips/cat?filter_id=1

http:// mysite/tips/dog?filter_id=2

Vous pouvez obtenir les valeurs des arguments comme suit:

$id = get_query_var('id');
$filter_id = get_query_var('filter_id');

Voici plus d'informations sur add_query_arg

0
robin