Здравствуйте.
Только начал изучать 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.
Или можно это как-то обойти штатными механизмами?
Спасибо что дочитали =)