Un paio di cose. Innanzitutto, i nomi delle tue funzioni devono essere preceduti da qualcosa di unico. WordPress è un grande ecosistema e probabilmente qualcun altro ha usato tutti i nomi generici delle funzioni a cui puoi pensare.
In secondo luogo, add_rewrite_endpoint
si occupa di aggiungere variabili di query per te. Quindi non è necessario questo:
add_filter( 'query_vars', 'add_query_vars');
function add_query_vars($vars){
$vars[] = "tours";
$vars[] = "activities";
return $vars;
}
Svuotare le regole di riscrittura su ogni carico non è una buona idea. Questo deve essere fatto solo una volta dopo aver aggiunto le regole. Come per l'attivazione del plugin. Quindi la tua add_endpoints
funzione potrebbe essere abbreviata in questo (con un nome di funzione migliore per punto uno sopra).
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PERMALINK);
add_rewrite_endpoint('activities', EP_PERMALINK);
}
Che funziona bene per i post. Se vuoi che funzioni su pagine o qualsiasi altro tipo di post gerarchico, dovrai usare la EP_PAGES
maschera endpoint.
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PAGES);
add_rewrite_endpoint('activities', EP_PAGES);
}
Ma non funzionerà ancora come previsto per te. Gli endpoint impostano la loro variabile di query uguale a tutto ciò che viene dopo. Quindi se il tuo URL è ...
yoursite.com/some-country/some-city/activities/asdf
le attività della variabile query saranno asdf. Se non segue nulla activities
, la tua query var sarà vuota (ma impostata), quindi verrà sempre valutata come falsa quando provi a catturarla ...
<?php
add_action( 'template_redirect', 'wpse42279_catch_vars' );
function wpse42279_catch_vars()
{
if( get_query_var( 'tours' ) )
{
// do stuff!
exit();
}
}
Puoi aggirare il problema filtrando request
e modificando il valore dei tuoi tour e delle variabili di attività su true se sono impostati.
<?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;
}
Dovresti dare un'occhiata a questa guida all'API Rewrite che ho scritto. Le parti rilevanti per la tua domanda sono comunque riassunte sopra.