web-dev-qa-db-fra.com

Comment réécrire une URL pour utiliser% taxonomy% au lieu de% category% lorsque plusieurs taxonomies sont présentes?

Je voudrais avoir la possibilité d'utiliser la taxonomie dans l'URL au lieu d'avoir seulement la catégorie comme "non catégorisé". Notez que j'ai plusieurs taxonomies (pays, états, etc.), dont certaines contiennent des milliers de termes (si cela compte encore).

Edit: J'ai omis de mentionner qu'il s'agit d'une émanation d'une autre question: Avantages et inconvénients de l'utilisation de [nom de taxonomie] à la place de [nom de catégorie]?

L'objectif est un lien permanent qui ressemble à quelque chose comme domain.com/2011/taxonomy-term/post-name.

Donc, si j'ai une taxonomie nommée pays et un article sur l'Egypte, je veux pouvoir brancher le terme Egypt dans cette URL.

2
Adam

La modification de la structure d'URL d'une publication comporte toujours deux parties: l'écriture de la nouvelle URL dans vos liens et la gestion de la nouvelle structure.

Manipulation de la nouvelle structure

Il est facile de manipuler la nouvelle structure: comme le nom de la publication (slug) suffit à identifier une publication, nous pouvons ignorer la taxonomie que vous utilisez dans l'URL. En théorie, vous devriez pouvoir utiliser n'importe quelle taxonomie, mais en pratique, vous ne pouvez pas le faire sans quelques ajustements supplémentaires.

Si vous utilisez %category%, la fonction redirect_canonical() lance et tente de rediriger toutes les requêtes avec un terme d'une autre taxonomie dans l'URL vers une catégorie avec la catégorie (car utiliser une seule URL pour chaque publication empêchera la diffusion du rang de page pour la même contenu). Vous voyez ceci lorsque toutes vos URL semblent aller à /uncategorized/[post-name]/. Vous pouvez entièrement décrocher la fonction ou y accrocher et empêcher la redirection si elle n’est pas nécessaire.

L'autre option serait d'utiliser l'une de vos taxonomies personnalisées dans la structure permalink. Cela empêchera redirect_canonical() de faire quoi que ce soit (jusqu'à ce que cette fonction soit également adaptée aux taxonomies personnalisées), mais en raison de un oubli dans la version WP 3.0 des taxonomies personnalisées, elle ne générera pas règles de réécriture hiérarchiques (cela sera corrigé en 3.1).

Ce que j'ai essayé à la place, et ce qui semble fonctionner, est de créer une structure de réécriture "factice", appelée %anything%, qui correspond à .+? (rien, mais pas glouton). Dans ce cas, vous devez également réactiver les règles de pageverbose, car WordPress ne remarque pas qu'il se passe quelque chose.

add_action('init', 'wpse9346_init');
function wpse9346_init()
{
    $GLOBALS['wp_rewrite']->add_rewrite_tag( '%anything%', '(.+?)', 'wpse9346_dummy=' );
    $GLOBALS['wp_rewrite']->use_verbose_page_rules = true;
}

Le paramètre wpse9346_dummy est ignoré, son utilisation devrait donc être sans danger. Ma structure de réécriture est maintenant /%anything%/%postname%/.

Écrire des URL de la nouvelle structure

C'est la partie où vous devez réfléchir: si une publication peut être étiquetée avec des termes de différentes taxonomies, quelle taxonomie devrions-nous utiliser pour créer un lien vers la publication? Supposons que nous ayons une taxonomie pour les pays et une pour les bureaux gouvernementaux. Un article sur Moubarak porterait la mention Egypt dans une taxonomie et President dans une autre. L'URL du message doit-il être /egypt/mubarak-steps-down/ ou /president/mubarak-steps-down/? Les deux URL fonctionneront et se retrouveront au même poste, mais si vous utilisez ma solution %anything% ci-dessus, le permalien contiendra %anything%, ce qui est bien sûr invalide. Alors connectez-vous à post_link et modifiez l'URL comme vous le souhaitez.

1
Jan Fabry

J'ai fait quelque chose de similaire. Cet article m'a montré le chemin:

http://shibashake.com/wordpress-theme/add-custom-taxonomy-tags-to-your-wordpress-permalinks

0
user3228