Пара вещей. Во-первых, имена ваших функций должны начинаться с чего-то уникального. 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, которое я написал. Тем не менее, соответствующие части вашего вопроса приведены выше.