Quelques choses. Tout d'abord, les noms de vos fonctions doivent être préfixés par quelque chose d'unique. WordPress est un grand écosystème, et quelqu'un d'autre a probablement utilisé tous les noms de fonctions génériques auxquels vous pouvez penser.
Deuxièmement, add_rewrite_endpoint
prend soin d'ajouter des variables de requête pour vous. Vous n'avez donc pas besoin de cela:
add_filter( 'query_vars', 'add_query_vars');
function add_query_vars($vars){
$vars[] = "tours";
$vars[] = "activities";
return $vars;
}
Rincer les règles de réécriture sur chaque chargement n'est pas une bonne idée. Cela ne doit être fait qu'une fois après l'ajout de vos règles. Comme lors de l'activation du plugin. Ainsi, votre add_endpoints
fonction pourrait être court-circuitée avec un meilleur nom de fonction par le point un ci-dessus.
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PERMALINK);
add_rewrite_endpoint('activities', EP_PERMALINK);
}
Ce qui fonctionne bien pour les messages. Si vous souhaitez qu'il fonctionne sur des pages ou tout autre type de publication hiérarchique, vous devrez utiliser le EP_PAGES
masque de point de terminaison.
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PAGES);
add_rewrite_endpoint('activities', EP_PAGES);
}
Mais cela ne fonctionnera toujours pas comme prévu pour vous. Les points de terminaison définissent leur variable de requête égale à tout ce qui vient après. Donc, si votre URL est ...
yoursite.com/some-country/some-city/activities/asdf
les activités des variables de requête seront en format PDF. Si rien ne suit activities
, votre requête var sera vide (mais définie), elle sera donc toujours considérée comme fausse lorsque vous tenterez de l'attraper ...
<?php
add_action( 'template_redirect', 'wpse42279_catch_vars' );
function wpse42279_catch_vars()
{
if( get_query_var( 'tours' ) )
{
// do stuff!
exit();
}
}
Vous pouvez contourner ce problème en filtrant request
et en modifiant la valeur de vos variables de visites et d'activités sur true si elles sont définies.
<?php
add_filter( 'request', 'wpse42279_filter_request' );
function wpse42279_filter_request( $vars )
{
if( isset( $vars['tours'] ) ) $vars['tours'] = true;
if( isset( $vars['activities'] ) ) $vars['activities'] = true;
return $vars;
}
Vous devriez jeter un œil à ce guide de l'API de réécriture que j'ai écrit. Cependant, les parties pertinentes de votre question sont résumées ci-dessus.