Jolie URL avec add_query_var

4

J'essaie d'ajouter un "post" à chaque message de mon site, par exemple

.

site.com/product-one/changelog site.com/product-two/changelog site.com/product-three/changelog

C'est le code que j'utilise atm, que j'ai trouvé quelque part ici:

global $wp,$wp_rewrite;
$wp->add_query_var('sub-page');
$wp_rewrite->add_rule('([^/]+)/(changelog)','index.php?pagename=$matches[1]&sub-page=$matches[2]', 'top');
$wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation

Cela fonctionne bien si je navigue sur site.com/product-one?sub-page=changelog mais si je me rend sur site.com/product-one/changelog je viens d'être redirigé vers site.com/product-one

J'ai donc désactivé la redirection canonique comme test à l'aide de:

remove_filter('template_redirect', 'redirect_canonical'); 

site.com/product-one/changelog ne redirige pas mais renvoie un 404 et site.com/product-one?sub-page=changelog fonctionne toujours.

Y at-il quelque chose que je peux changer avec ma réécriture pour que cela fonctionne?

Remarque: je sais que je pourrais faire cela facilement avec les types de publication personnalisés et que j'ai commencé à suivre cette voie, mais comme le site utilise déjà la structure% postname% permalink, je ne pourrais pas alors avoir la personnalisation. le type de message a cette structure ainsi que les pages des sites.

    
posée Adam Dempsey 22.10.2011 - 16:47

1 réponse

6
add_rewrite_endpoint( 'changelog', EP_ROOT ); 

Ajoutera le point de terminaison, changelog , que vous pourrez ensuite vérifier sur template_redirect hook.

Si la correspondance est établie entre les variables de requête ( $wp_query->query ), le tableau doit contenir la clé changelog contenant tout ce qui vient après la valeur / . Donc, pour l'URL example.com/product1/changelog/5 , vous auriez une variable de requête nommée changelog avec la valeur 5 .

S'il n'y a rien après l'extrémité, la variable sera présente, mais contiendra une chaîne vide. Notez que get_query_var() ne fonctionnera pas pour une telle utilisation car il est codé en dur pour renvoyer une chaîne vide si query var n'est pas du tout défini.

Il peut suffire de simplement vérifier si une variable est présente et, le cas échéant, de modifier les variables de requête dans les crochets de requête (tels que pre_get_posts ) et de charger votre propre sous-message avec le modèle de journal des modifications.

Vous pouvez également essayer d’expérimenter différents masques de points de terminaison permaliens, par exemple. EP_PAGES

Références:

réponse donnée Tom J Nowell 26.10.2011 - 00:31

Lire d'autres questions sur les étiquettes