WordPress: перезапись или обход правил перенаправления для пользовательских типов записей с перезаписью URL - PullRequest
1 голос
/ 11 сентября 2011

-Я использую ряд правил переписывания WordPress, чтобы позволить вводить коды стран сразу в начале пути URL, которые используются для определения смещения часового пояса.Пример:

add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]&post_type=days','top');

Это принимает запрос, такой как www.daysoftheyear.com/days/2011/ (который обычно возвращает весь действительный контент для этого запроса) и учитывает, например, www.daysoftheyear.com/ us / days / 2011 / для возврата того же контента, но с поддержкой смещения часового пояса на основе кода страны.

Это прекрасно работает практически во всех местах, за исключением одного типа запроса - одногодля пользовательских страниц типа «дни», например, http://www.daysoftheyear.com/days/waffle-day/.

Имеются следующие правила:

add_rewrite_rule('^([A-Za-z]{2})/?$', 'index.php?geo=$matches[1]','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]&post_type=days','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]$matches[3]&post_type=days','top');   
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/([0-9]+)/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]$matches[3]$matches[4]&post_type=days','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([A-Za-z\-].*)/?$', 'index.php?geo=$matches[1]&page=$matches[2]','top');
add_rewrite_rule('^([A-Za-z]{2})/([A-Za-z\-].*)/?$', 'index.php?geo=$matches[1]&pagename=$matches[2]','top');

Пятое правило должно соответствовать http://www.daysoftheyear.com/gb/days/waffle-day/ во многихтак же, как и выше, но перенаправляет - я подозреваю, что это противоречит встроенным правилам, которые пытаются перенаправить на правильный URL-адрес, если он поврежден (например, если я наберу структурное совпадение с правильным URL-адресом, он перенаправит меня направильный ресурс).

Я могу подтвердить, что «сырой» URL для этого запроса работает - например, http://www.daysoftheyear.com/index.php?geo=en&name=soup-month&post_type=days возвращает действительный и ожидаемый результат.

Я неубежден, что это правило регулярных выражений, а неконкретная проблема, связанная с тем, как WP управляет пользовательскими типами записей?

РЕДАКТИРОВАТЬ

Обновлен с учетом дефисов - никаких изменений в поведении, хотя регулярное выражение сообщает, что регулярное выражение работаетдля примера URL.

Обновлен после отключения функции канонического перенаправления WP - теперь 404 'вместо 301' на страницу.

Обновлен для использования "page" вместо "pagename",основываясь на приведенной здесь информации: http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters - без изменений в поведении.

Обновлен код, добавлен перенос строки и уточнено, что я на самом деле ссылаюсь на строку 5, а не на строку 4.

Ответы [ 2 ]

1 голос
/ 11 сентября 2011

Этот запрос http://www.daysoftheyear.com/days/waffle-day/ не будет соответствовать вашему четвертому правилу, поскольку вы не допустили - в группе cature: ([A-Za-z].*).Замените эту группу на ([A-Za-z\-].*), и она должна совпадать.
HTH

0 голосов
/ 11 сентября 2011

Решено;похоже, что вышеприведенный набор правил теперь работает правильно - спасибо всем!

...