Intereting Posts
При удалении темы настройки пользовательских настроек темы также удаляются из базы данных? Ссылка на страницу администрирования второго уровня Как получить комментарии по идентификатору сообщения? Ручное отображение виджета Захват определенного контента Можно ли передавать переменные в WordPress извне? Ninja Forms 3 – значения формы обработки при представлении Как удалить действие, сделанное в плагине из functions.php в моей теме? Как объединить категории с phpMyAdmin Превосходные практики Nonce: скрытый ввод против wp_localize_script? Самый гибкий плагин Фотогалерея? Ограничить возможности администратора создавать, редактировать и удалять страницы в Multisite Вставьте настраиваемое поле в короткий код и используйте его в сообщениях (-ах) Как создать живую демонстрационную страницу для темы? Направить новую схему перезаписи URL на новую?

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

У меня есть пользовательский тип сообщения, называемый «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/

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

благодаря

Solutions Collecting From Web of "Конечная точка конечной позиции по умолчанию"

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