Онилайт
с 9:00 до 21:00
info@onilite.ru

ЧПУ для нового типа записей и таксономий в WordPress

Виктор Черников
26.11.2019

Задача

Необходимо создать новый тип записей и таксономий, связанных между собой, с учётом иерархии таксономий с неограниченным уровнем вложенности.

А также настроить для них ЧПУ (человеку понятные url-адреса) следующего вида:

domain/catalog/category/
domain/catalog/category/tovar/
domain/catalog/category/sub-category/
domain/catalog/category/sub-category/tovar/

Решение

Используйте следующий код в function.php или в своём плагине:

Таким образом был создан каталог товаров. Вы конечно можете использовать свои названия записей и таксономий и создать например портфолио работ или каталог проектов, на ваше усмотрение.

Разъяснения

Вся сложность создания таких url заключается в том, что система не может выдавать записи и таксономии одновременно через одинаковый слаг (в нашем случае catalog). Происходит это из-за того что для записей и таксономий создаются абсолютно одинаковые правила декодирования url-адресов, так называемые «правила перезаписи».

Правила перезаписи — Это регулярные выражения, помогающие распозновать url-адрес и подключить необходимый шаблон страницы.
Правила хранятся в таблице базы данных wp_options, где option_name = rewrite_rules.

Чтобы преодолеть эту сложность, необходима функция создания таких правил и функция их перезаписи. Функция перезаписи должна срабатывать при создании/изменении/удалении таксономий для чего используем хуки WordPress.

Интересно почитать

Разработка дизайна сайта

Дизайн — это не только стиль Одним из самых важных и фундаментальных этапов создания…

Создание Landing Page

Landing Page (лендинг пейдж) — переводится как посадочная страница или ещё её называют целевая…

Комментарии и отзывы

Всего оставлено 4 комментария.

  • Вячеслав

    Супер статья, огромное спасибо. Подскажите, а можно ли как-то удалить catalog из урла по итогу?

    30.10.2020 14:55 Ответить
    • Виктор Черников

      Если удалить "catalog" из url, система не поймёт где кастомные записи и таксономии, а где родные рубрики и записи. Даже если гипотетически предположить, что это бы работало, например создавая уникальное правило для каждой новой страницы, то в случае когда название рубрики и записи совпадёт с названием кастомной таксономии и кастомной записи — WordPress не сможет корректно отобразить страницу, сработало бы первое правило найденное в массиве. Именно чтобы не возникало таких багов мы отделяем кастомные подсистемы слагом.

      03.12.2020 09:20 Ответить
    • Виктор Черников

      Если в вашей системе есть только каталог, используйте стандартные рубрики и записи. Их можно кастомизировать для админ-панели при желании. Тогда от слага catalog можно было бы избавиться.

      03.12.2020 09:24 Ответить
  • Владимир

    У меня такая проблема что я хочу вместо slug кастомной записи вставить динамеческую, которая формируется из родительских рубрик (категорий), например site.com/category/category-chld/post-name
    Заменим слаг на %category% я получаю нужный результат в урле, но пост возвращает 404 ошибку…
    Как с этим бороться?

    16.02.2021 09:47 Ответить

Добавить комментарий

Для комментирования в один клик необходим вход или регистрация.

Заявка на обратную связь
Нажимая на кнопку, вы даете согласие на обработку персональных данных
+7 (937) 245-81-91
с 9:00 до 21:00
info@onilite.ru