Algumas coisas. Primeiro, seus nomes de função precisam ser prefixados com algo único. O WordPress é um grande ecossistema, e provavelmente alguém usou todos os nomes de funções genéricos que você pode imaginar.
Segundo, add_rewrite_endpoint
cuida de adicionar variáveis de consulta para você. Então você não precisa disso:
add_filter( 'query_vars', 'add_query_vars');
function add_query_vars($vars){
$vars[] = "tours";
$vars[] = "activities";
return $vars;
}
Liberar regras de reescrita em todas as cargas não é uma boa ideia. Isso só precisa ser feito uma vez depois que suas regras forem adicionadas. Como na ativação do plugin. Portanto, sua add_endpoints
função pode estar em curto (com um nome de função melhor por ponto um acima).
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PERMALINK);
add_rewrite_endpoint('activities', EP_PERMALINK);
}
O que funciona bem para postagens. Se você deseja que ele funcione em páginas ou em qualquer outro tipo de postagem hierárquica, será necessário usar a EP_PAGES
máscara do nó de extremidade.
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PAGES);
add_rewrite_endpoint('activities', EP_PAGES);
}
Mas isso ainda não vai funcionar como esperado para você. Os pontos de extremidade definem sua variável de consulta igual ao que vier depois dela. Portanto, se o seu URL for ...
yoursite.com/some-country/some-city/activities/asdf
as atividades da variável de consulta serão asdf. Se nada activities
acontecer, sua consulta var estará vazia (mas configurada), portanto será sempre avaliada como falsa quando você tentar capturá-la ...
<?php
add_action( 'template_redirect', 'wpse42279_catch_vars' );
function wpse42279_catch_vars()
{
if( get_query_var( 'tours' ) )
{
// do stuff!
exit();
}
}
Você pode contornar isso filtrando request
e alterando o valor de suas variáveis de passeios e atividades para true se estiverem definidas.
<?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;
}
Você deve dar uma olhada neste guia da API de reescrita que escrevi. As partes relevantes para sua pergunta estão resumidas acima, no entanto.