Damaks
@Damaks

Постоянные ссылки с помощью rewrite_rule. Голова уже сломана. Как?

Вечер добрый.

Уже давно голову ломаю над этим вопросом, пока безрезультатно. Пришла пора наконец его решить.

Стандартные настройки постоянных ссылок в wordpress не позволяют менять адреса для пользовательских типов записей и таксономий. Используемый плагин "Types" также не имеет такого функционала. Проблеск надежды появился с плагином "Custom Post Type Permalinks", но его недостаточно. Разобраться в его коде не смог, там просто адище.

Обрисую ситуацию.

Есть один тип пользовательских записей и несколько пользовательских таксономий.

  • Ссылки на запись пользовательского типа имеют вид:
    "http://site.ru/%тип поста%/%slug записи%"
  • Ссылки на пользовательскую таксономию:
    "http://site.ru/%таксономия%/%slug таксономии%"
  • Одна из этих таксономий является иерархическим списком городов по типу:
    "Россия" - "Москва и московская область" - "Мытищи"

Значение данной таксономии выбирается пользователем и хранится в сессии. В зависимости от этого значения выводятся записи в других пользовательских таксономиях и поиске с помощью модифицированного цикла. Т.е. по одной и той же ссылке "http://site.ru/%таксономия%/%slug таксономии%" выводятся разные записи при разных значениях сессии.

Необходимо изменить ссылки на список постов пользовательских категорий, добавив в них выбранный пользователем город (из сессии, оно аналогично одной из пользовательских таксономий). Например, пользователь выбрал своим городом Москву. Тогда:
из ссылки вида
"http://site.ru/%таксономия%/%slug таксономии%"
необходимо сделать ссылку вида:
"http://site.ru/%город%/%таксономия%/%slug таксономии%"

(или
"http://site.ru/%таксономия%/%slug таксономии%/%город%"
, ещё не определился).

То есть для всех других пользовательских таксономий добавить в ссылку выбранный город. То же самое и с ссылками на записи пользовательского типа. Как?

Пробовал разобраться с "add_rewrite_rule", но успехов не было. Да и толковых мануалов не нашёл. А если нашёл, то либо регулярки неправильные составляю, либо само правило не работает.

Как писал выше, есть хороший плагин "Custom Post Type Permalinks". Он позволяет в качестве рулярки в ссылку вставить значение пользовательской таксономии (в моём случае город). Но не подходит по двум причинам:
1) город вставляется только в ссылки на запись пользовательского типа. А мне необходимо ещё и на страницы с постами пользовательских таксономий.
2) вставка города имеет иерархию, то есть там через / последовательно все значения от страны, области, до города. Желательно только выбранный вариант пользователем (он может выбрать и область).

Как всё это реализовать, кто подскажет? Моей признательности не будет границ, буду называть советника "Богом вордпресса".
  • Вопрос задан
  • 792 просмотра
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Подобные rewrire rules - штука достаточно непростая, ибо, как вы заметили, документация и уроки по этой теме практически отсутствуют. Я года два назад для одной SaaS-платформы на базе WP делал подобную штуку с городами. В итоге сделал, но убил не одну ночь на это, моск почти сломал. Сейчас со старта не вспомню детали, но логика плюс-минус такова:

1. add_rewrite_tag - создать теги-шаблоны %city% и тд
2. зарегистрировать новые переменные для query через фильтр query_vars
3. создать rewrite_rules

Самое главное - регулярки, которые будут ваши rewrite tags (1) парсить в переменные query (2). То есть, результирующая строка в итоге будет типа index.php?post_type=XXX&taxonomy1=YYY&taxonomy1_term=ZZZ&taxonomy2=WWW&taxonomy2_term=UUU

Да и вообще, для начала сделайте п.2 и добейтесь чтобы у вас все работало с "некрасивыми урл", а уж потом - займитесь ЧПУ. Потому как с rewrite rules чаще всего беда как раз в том, что query vars неправильные.

Ну и потом еще сами урлы ссылок (пермалинки) надо будет в нужном формате строить. Там свои хуки, но это уже не сложно.

В общем, приготовьтесь к большому объему отладки, запаситесь кофе Query Monitor и Rewrite Rules Inspector в помощь.

Если настойчиво исследовать результаты гугла после 3й страницы, пробовать разные ключевые фразы, то должно найтись 2-3 урока, более-менее глубоких. 2 штуки точно было на каком-то сайте кажется со словом Shiba в названии. Я пороюсь на досуге в архивах, может найду.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы