@Q133

Как правильно настроить специфичные ЧПУ url для собственных типов записей в WP?

Здравствуйте.

Только начал изучать WP. Стоит задача - собрать каталог организаций со сложной структурой, фильтрацией, ЧПУ.
Сделал набор собственных типов записей (через register_post_type) и создал пару тестовых записей.

Условная пара из них
  • Тип записей city с таксономией country.
  • Тип записей company

Далее, я пытаюсь создать правила вида:

add_rewrite_rule(
   "catalog/(ru|by|ua)/$",
   'index.php?post_type=city', //&country=$matches[1]
   "top"
 );


Вообще цель стоит построить немного более широких охват ЧПУ:

#catalog/%country%/ - список городов
#catalog/%country%/%city%/ - список компаний, привязанных к конкретному городу
#catalog/%country%/%city%/%company%/ - конкретная компания


и множество узконаправленных фильтров

#catalog/%country%/%city%/filer_type/(ip|ooo)/ - вывод компаний отфильтрованных по типу ИП, ООО 
#catalog/%country%/%city%/filer_vid/([a-z_\-]+)/ - вывод компаний с фильтром по виду деятельности


так же будут общие фильтры catalog/%country%/%city%/filter/?f1=x&f2=y&f3=z

Уперся уже на уровне add_rewrite_rule,

Набрался целый ряд вопросов:

1. настройки нового типа записи (register_post_type). При создании:

public - true, (чтобы видеть в админке), но какими в итоге должны быть

publicly_queryable
query_var
rewrite


Чтобы:

я мог настроить свои правила ЧПУ через add_rewrite_rule, при этом, чтобы при обращении к сайту с запросом
my.site/?city=moskva
не появлялась страница пустая (т.е. чтобы пользовательский запрос такого вида не обрабатывался (если все 3 свойства true - он как раз таки обрабатывается)) и чтобы при этом я мог спокойно задать в дальнешем свои ЧПУ правила

2. Правильно ли я понимаю правила того, как WP обрабатывает запросы ЧПУ:

я прописываю ЧПУ правило для
catalog/%country%/
- соотв запрос нужно передать вида

add_rewrite_rule(
        "^catalog/([a-z_\-]+)/$",
        'index.php?post_type=city&country=$matches[1]', 
        "top"
);


а дальше WP должен выбрать все города (тип записи city), которые находятся в разделе country (это таксономия для city).
и попытается вывести их через archive-city.php, если его не существует - то через archive.php?

После того как я добавлю код add_rewrite_rule в свою функцию и подключу ее
add_action( 'init', 'custom_rules' );

Я сохраняю настройки на странице со списком пермалинков в админке и изменения должны вступить в силу.
Но я упорно застопорился на первом же шаге: /catalog/ru/ - отдает 404 =(

2.1 Еще здесь не понятно что должно быть в параметре $redirect, если я пишу ЧПУ правило для дет. карточки организации и мне надо использовать символьный код (кастомное свойство, созданное через плагин "Расширенные произвольные поля").

По идее WP должен понять index.php?post_type=city&post_id=$matches[1], но
это тоже только мое предположение. А как сделать, чтобы он понял, что ему нужно выводить данные через single.php по входной переменной?

3. Я еще не дошел до фильтров в ЧПУ, поэтому даже еще не особо понимаю, где в итоге реализовывать их логику:

Как сейчас я это представляю - логика в файле archive-XXX.php, перед выводом данных.
XXX определяется типом записей, который в итоге я вывожу:

  • Если конечные данные это список городов - то в archive-city.php будет фильтр, который будет ориентироваться на данные из get_query_var и префильтровывать данные.
  • Если конечные данные - организации, то archive-company.php будет работать со своим фильтром данных.
    + т.к. т.к. тут будет куча разных вариантов фильтров, то тут и будет пачка логики? Или как то нормально можно это по уму организовать?

.

4. проверка формата url

+ нужно еще будет проверять правильность ЧПУ, например, что по адресу
/ru/tokio/some-firm/ - что фирма some-firm действительно привязана через кастомное свойство к городу Токио, а город токио - к стране RU.
Или можно это как-то обойти штатными механизмами?

Спасибо что дочитали =)
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы