Wordpres post type создание родительских отношений между типами. (hierarchical)

101
0
101

Задача заключается в том чтобы сделать родительское отношение, аналогично тому как работают pages (статические страницы).
В интернете много странных решений вплоть до функций преобразования URL.
Как реализовать иерархию через таксономию я до конца не разобрался.

Моя ситуация.
Есть проекты — projects. Необходимо сформировать разделы проектов по их категориям. Например design. А подкатегория дизайна — фирменный стиль, firm-style.

Итого конечный урл моего проекта должен быть /projects/design/firm-style/my-project-name.

Это делается не сложно. В общем все описано в документации, но почему пришлось не мало поискать чтобы связать вместе эти простые вещи.

Создаем post type. Ключевые параметры hierarchical, rewrite, supports

add_action( 'init', 'register_type_project' );
function register_type_project() {
   register_post_type( 'project', [
      'labels'             => [
         'name'               => 'Проекты',
         'singular_name'      => 'Проект',
         'menu_name'          => 'Проекты',
         'name_admin_bar'     => 'Проекты',
         'add_new'            => 'Добавить',
         'add_new_item'       => 'Добавить ',
         'new_item'           => 'Новый Проект',
         'edit_item'          => 'Редактировать Проект',
         'view_item'          => 'Открыть Проект',
         'all_items'          => 'Проекты',
         'search_items'       => 'Найти Проект',
         'parent_item_colon'  => 'Родительский Проект',
         'not_found'          => 'Проект не найден',
         'not_found_in_trash' => 'В корзине ничего нет'
      ],
      'public'             => true,
      'publicly_queryable' => true,
      'show_ui'            => true,
      'show_in_menu'       => true,
      'show_in_rest'       => true, // убирает гутенберг
      'show_in_admin_bar'  => false,
      'query_var'          => true,
      'capability_type'    => 'post',
      'capabilities'       => [
         'edit_post'          => 'edit_pages',
         'read_post'          => 'edit_pages',
         'delete_post'        => 'edit_pages',
         'edit_posts'         => 'edit_pages',
         'edit_others_posts'  => 'edit_pages',
         'publish_posts'      => 'edit_pages',
         'read_private_posts' => 'edit_pages',
      ],
      'has_archive'        => true,
      'menu_position'      => 10,
      'menu_icon'          => 'dashicons-screenoptions',
      'hierarchical'       => true, // иерархия
      'supports'           => [ 'page-attributes', 'title', 'thumbnail','editor' ], // page-attributes - блок редактирования родительского элемента
      'rewrite'            => [
         'slug' => 'projects',
      ]  // слаг для post type
   ] );
}

У нас появились проекты. Тут я уже сделал заранее разделы.

При создание проекта мы видим блок родительского отношения

По нему можно выстроить иерархию среди категорий.
И соответственно добавляем наш проект в саму нижнюю категорию. Url преобразуется согласно иерархии.
Получили необходимый результат /projects/design/firm-style/my-project-name.
!ВАЖНО.
При работе с post-type и rewrite необходимо перезагрузить настройки ссылок через настройки Постоянные ссылки. Просто зайти и сохранить ничего не изменяя.

0