Intereting Posts
Что произойдет, если администратор установит плагин, когда плагин включен в тему? Вручную кэшируйте специальную страницу без WP-но-используя-WP (например, результаты Ajax) с W3TC Изменение названия страницы динамически изнутри плагина Проверить родительскую категорию с идентификаторами от childs – get_term_children Лучшие практики тестирования A / B? Можно ли получить сообщения в зависимости от условия мета-ключа LIKE? Создание подпапки внутри корневой установки? Могу ли я сделать поисковый запрос, который включает пробел? Два цвета в одном заголовке Отсутствует визуальный редактор, проблема с сервером, как бы вы отлаживали его? Включение специального типа сообщений в виджет Архивы Показать статьи о spfic slug Как создать бэкэнд для пользовательской темы? Могу ли я изменить текст «Главная» в меню? Использование различной wp_nav_menu theme_location на основе идентификатора страницы (или родительского идентификатора)

.htaccess переписать

Я создал собственный тип сообщения, называемый «событие», и добавил событие под названием «Лондон 2012». Я хочу следующую структуру URL-адреса для страницы:

local.mysite.com/london-2012/speakers 

Я создал страницу под названием «Динамики», дающую мне рабочий /speakers url (у меня есть Permalinks set to «Post name»).

Теперь я создал статический тестовый сайт и добавил следующее в .htaccess:

 RewriteEngine On RewriteRule ^([A-Za-z0-9-]+)/speakers?$ /speakers.php [NC,L] 

Это означало, что если я local.testsite.com/something/speakers на local.testsite.com/something/speakers он отобразит содержимое speaker.php, сохранив URL-адрес orignal. Отлично! Или так я думал …

Теперь, перенести правило на мою установку WordPress (как путем добавления правила в файл .htaccess напрямую – под RewriteEngine on line – и через add_rewrite_rule() ), я получаю странное поведение.

 RewriteRule ^([A-Za-z0-9-]+)/speakers/?$ /speakers?event=%1 [L] 

Вместо оставшегося URL-адреса и отображения содержимого /speakers , это фактически перенаправляет меня на страницу / speakers, и URL-адрес меняется.

Это поведение по умолчанию для страницы в WP даже без каких-либо изменений в файле .htaccess, поэтому я могу только представить, что по какой-то причине оно не соответствует моему правилу, а затем ударяет по строке RewriteCond %{REQUEST_FILENAME} !-f . Либо это, либо оно соответствует, но затем продолжается, несмотря на линию [L] .

Во всяком случае, я думаю, что это все покрывает – если у кого-то есть идеи, я бы очень признателен, потому что я немного с ума сошел!

Обновление 1

Сортировано – благодарит Брайана. Ваше решение действительно работало, но поскольку переменная запроса называлась «событие», она сбивалась с толку и отправляла меня в / speakers / в качестве перенаправления. Я изменил его, чтобы просто быть «е», и теперь все в порядке. Еще раз спасибо!

Похоже, вам нужно обработать переписать, используя строки запроса, а не сегмент URI и передать запрос через index.php. WordPress кажется агностиком того, что вы пытаетесь сделать здесь.

Попробуйте следующее правило и перейдите на страницу «Настройки-> Перманентные ссылки», чтобы очистить предыдущие правила и добавить их в стек.

 add_rewrite_rule( '^([A-Za-z0-9-]+)/speakers/?$', //Checked against the global $wp object - $wp->request 'index.php?page=speakers&event=$matches[1]', //Use WP_Query params to find your page 'top' //This will superceed the default WP rewrite stack ); 

Обязательно зарегистрируйте свою переменную запроса с помощью WP, чтобы вы могли использовать ее в $wp_query ;

 add_filter('query_vars', 'my_query_vars'); function my_query_vars($vars){ $vars[] = 'event'; return $vars; } 

Затем вы можете получить доступ к своей переменной запроса event используя следующее:

 get_query_var('event'); 

Для тестирования я очень люблю плагин Monkeyman Rewrite Analyzer . Это позволяет вам видеть за занавеской WordPress, переписывать и оценивать, какие правила совпадают, и как их строки запроса конкретизируются.