Произвольные rewrite правила
-
Добрый день.
Столкнулся с задачей реализации собственных rewrite правил.
Есть сайт объявлений.
Объявления размещаются по рубрикам различного уровня вложенности.
Объявления делятся по регионам. Задается параметр при их публикации.Посетитель заходя на сайт выбирает регион: «Московская область» передали GET и запомнили выбор пользователя
http://site.ru/?region=545При переходе в рубрику например «Недвижимость» посетитель увидит объявления у которых параметры «регион/область» указана как «Московская область (545)»
Адрес объявления видим таким: http://site.ru/realty/slug_ad.htmlУ региона 545 есть slug — msk
Необходимо добавить rewrite правило, чтобы адрес объявления принял следующий вид:
http://site.ru/msk/category/slug_ad.html
возможно даже такой
http://site.ru/msk/category/category2/category3/slug_ad.htmlКак вариант, конечно, можно создать рубрики с названиями регионов, к ним добавить подрубрики для объявлений. Но сколько же будет копий одинаковых рубрик…
Поэтому решил попробовать решить задачу при помощи функции add_rewrite_rule и add_rewrite_tag.
По мимо объявлений на сайте размещаются записи в раздел Новости, Статьи и пр. которые не делятся по регионам.
Для тестирования функций воспользовался кодом который работает на страницах:
add_action('init', 'my_rewrite_rule'); function my_rewrite_rule(){ add_rewrite_tag('%region%', '([^&]+)'); add_rewrite_rule('^([^/]*)/([^/]*)/?', 'index.php?region=$matches[1]&pagename=$matches[2]', 'top'); flush_rewrite_rules(); }
Все работает. Но как быть с записями размещенными на различных уровнях вложенности категорий? Что то вроде:
add_rewrite_rule('^([^/]*)/([^/]*)/([^/]*)/?', 'index.php?region=$matches[1]&cat=$matches[2]&p=$matches[3]', 'top');
не работает, переходя по /msk/category/slug_ad.html вижу белый экран, а не контент записи.
В настройках постоянных ссылок указано: /%category%/%postname%.html
И как быть, когда уровень категорий больше одного? WP сделаем редирект самостоятельно?
Возможно есть другой выход и ситуации? Спасибо.
- Тема «Произвольные rewrite правила» закрыта для новых ответов.