Пара вещей. Во-первых, имена ваших функций должны начинаться с чего-то уникального. WordPress - это большая экосистема, и кто-то другой, вероятно, использовал все имена общих функций, которые вы можете придумать.
Во-вторых, add_rewrite_endpointзаботится о добавлении переменных запроса для вас. Таким образом, вам не нужно это:
add_filter( 'query_vars', 'add_query_vars');
function add_query_vars($vars){
$vars[] = "tours";
$vars[] = "activities";
return $vars;
}
Сброс правил перезаписи для каждой загрузки не очень хорошая идея. Это нужно сделать только один раз после добавления ваших правил. Как и при активации плагина. Таким образом, ваша add_endpointsфункция может быть закорочена на это (с лучшим именем функции в каждой точке выше).
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PERMALINK);
add_rewrite_endpoint('activities', EP_PERMALINK);
}
Который отлично работает для постов. Если вы хотите, чтобы он работал на страницах или любых других иерархических типах записей, вам придется использовать EP_PAGESмаску конечной точки.
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PAGES);
add_rewrite_endpoint('activities', EP_PAGES);
}
Но это все равно не сработает, как ожидалось для вас. Конечные точки устанавливают свою переменную запроса равной тому, что идет после нее. Так что, если ваш URL-адрес ...
yoursite.com/some-country/some-city/activities/asdf
переменная деятельности запроса будет asdf. Если ничего не следует activities, ваш запрос var будет пустым (но установлен), поэтому он всегда будет оцениваться как ложный, когда вы пытаетесь его перехватить ...
<?php
add_action( 'template_redirect', 'wpse42279_catch_vars' );
function wpse42279_catch_vars()
{
if( get_query_var( 'tours' ) )
{
// do stuff!
exit();
}
}
Вы можете обойти это, отфильтровав requestи изменив значение ваших туров и переменных деятельности на true, если они установлены.
<?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;
}
Вы должны взглянуть на это руководство по Rewrite API, которое я написал. Тем не менее, соответствующие части вашего вопроса приведены выше.