Intereting Posts
Короткая ссылка для чтения полного сообщения Расширение API-интерфейса WordPress с помощью специального интерфейса Роль, которая может редактировать только виджеты, а не другие параметры темы Получить список всех зарегистрированных типов сообщений wordpress $ wpdb работает только один раз Стиль WordPress Custom Post Type Single Page Ошибка запроса WP? Не могу узнать, почему сообщения не найдены! Управление WordPress Theme Несколько циклов в пользовательском шаблоне типа сообщения? как использовать другой домен / поддомен для авторов / каталогов на одном сайте? Проверьте значение настраиваемого поля в разных типах сообщений, чем текущий, и сделайте что-нибудь Отменить / остановить текущее запланированное событие cron? Дополнительный вариант для администратора пользовательского заголовка Как настроить результаты поиска в теме Bones? Woocommerce Изменение места размещения с помощью обертки

Конечная точка конечной позиции по умолчанию

У меня есть пользовательский тип сообщения, называемый «destination», и я установил маску EP для типа post по умолчанию EP_PERMALINK. Я добавил пару конечных точек следующим образом:

add_filter( 'query_vars', 'add_query_vars'); function add_query_vars($vars){ $vars[] = "tours"; $vars[] = "activities"; return $vars; } add_action('init', 'add_endpoints'); function add_endpoints(){ global $wp_rewrite; add_rewrite_endpoint('tours', EP_PERMALINK); add_rewrite_endpoint('activities', EP_PERMALINK); $wp_rewrite->flush_rules(); } 

Теперь, если я тестирую это на обычной почте, он перенаправляет на шаблон, в котором он мне нужен (у меня есть перенаправление шаблона для единственного шаблона)

то есть. somesite.com/test-category/test/activities/

Но для типа post (который является иерархическим) он просто удаляет конечную точку из URL-адреса и остается на шаблоне single-destination.php

то есть. somesite.com/destination/south-africa/kruger-national-park/activities/

становится

somesite.com/destination/south-africa/kruger-national-park/

Любая помощь или руководство будут высоко оценены. Я боролся с этим в течение нескольких часов и никаких результатов 🙁

благодаря

Пара вещей. Во-первых, ваши имена функций должны иметь префикс с чем-то уникальным. WordPress – большая экосистема, и кто-то еще, вероятно, использовал все общие имена функций, о которых вы можете думать.

Во-вторых, add_rewrite_endpoint позаботится о добавлении к вам переменных запроса. Поэтому вам это не нужно:

 add_filter( 'query_vars', 'add_query_vars'); function add_query_vars($vars){ $vars[] = "tours"; $vars[] = "activities"; return $vars; } 

Правила промывки перезапуска на каждой нагрузке – это не очень хорошая идея. Это нужно сделать только один раз после добавления правил. Как при активации плагина. Таким add_endpoints функция 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 конечной точки 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 будет пустым (но установленным), поэтому он всегда будет оцениваться как false, когда вы попытаетесь его поймать …

 <?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; } 

Вы должны посмотреть на это руководство по API Rewrite, который я написал. Однако соответствующие части для вашего вопроса суммируются выше.