WP Costum Post Type — Как правильно создать несколько CPT?
Доброго времени суток.
Пытаюсь создать несколько кастомных типов записей, но столкнулся с проблемой в Слагах.
Суть: Хотелось бы, что б слагов не было, НО как оказалось , как только я в одном из Типов указываю
'rewrite' => array('slug' => '/', 'with_front' => false), |
'rewrite' => array('slug' => '/', 'with_front' => false),
то почему то остальные начинают шабашить (постоянные ссылки чищу). Ссылки как бы есть, они срабатывают, но на них нету ничего, что то типа 404 .Так же корректно перестают работать и Статические страницы (post_type=page).
Как мне создать 2+ кастомных типов, что я делаю не так? Код прикрепил. Как я понимаю где то просто ошибка в логике, но не понимаю где. Спасибо!
add_action( 'init', 'registeriruem_cpt' ); function registeriruem_cpt(){ register_post_type( 'region', array( 'labels' => array( 'name' => 'Регионы', // основное название для типа записи 'singular_name' => 'Регион', // название для одной записи этого типа 'add_new' => 'Добавить регион', // для добавления новой записи 'add_new_item' => 'Добавление Регионы', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование Регионы', // для редактирования типа записи 'new_item' => 'Новая Регион', // текст новой записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине 'menu_name' => 'Регионы', // название меню ), 'public' => true, 'menu_position' => 4, 'menu_icon' => 'dashicons-admin-site-alt3', 'hierarchical' => true, 'supports' => array('title','editor','thumbnail','page-attributes'), 'taxonomies' => array( 'page'), 'has_archive' => true, 'rewrite' => true, //'query_var' => true, )); register_post_type( 'usluga', array( 'labels' => array( 'name' => 'Услуги', // основное название для типа записи 'singular_name' => 'Услуга', // название для одной записи этого типа 'add_new' => 'Добавить услугу', // для добавления новой записи 'add_new_item' => 'Добавление услуги', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование услуги', // для редактирования типа записи 'new_item' => 'Новая услуга', // текст новой записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине 'menu_name' => 'Услуги', // название меню ), 'public' => true, 'menu_position' => 4, 'menu_icon' => 'dashicons-portfolio', 'hierarchical' => true, 'supports' => array('title','editor','thumbnail','page-attributes'), 'taxonomies' => array( 'page'), 'has_archive' => true, 'rewrite' => array('slug' => '/', 'with_front' => false), //'rewrite' => true, //'query_var' => true, )); } |
add_action( 'init', 'registeriruem_cpt' ); function registeriruem_cpt(){ register_post_type( 'region', array( 'labels' => array( 'name' => 'Регионы', // основное название для типа записи 'singular_name' => 'Регион', // название для одной записи этого типа 'add_new' => 'Добавить регион', // для добавления новой записи 'add_new_item' => 'Добавление Регионы', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование Регионы', // для редактирования типа записи 'new_item' => 'Новая Регион', // текст новой записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине 'menu_name' => 'Регионы', // название меню ), 'public' => true, 'menu_position' => 4, 'menu_icon' => 'dashicons-admin-site-alt3', 'hierarchical' => true, 'supports' => array('title','editor','thumbnail','page-attributes'), 'taxonomies' => array( 'page'), 'has_archive' => true, 'rewrite' => true, //'query_var' => true, )); register_post_type( 'usluga', array( 'labels' => array( 'name' => 'Услуги', // основное название для типа записи 'singular_name' => 'Услуга', // название для одной записи этого типа 'add_new' => 'Добавить услугу', // для добавления новой записи 'add_new_item' => 'Добавление услуги', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование услуги', // для редактирования типа записи 'new_item' => 'Новая услуга', // текст новой записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине 'menu_name' => 'Услуги', // название меню ), 'public' => true, 'menu_position' => 4, 'menu_icon' => 'dashicons-portfolio', 'hierarchical' => true, 'supports' => array('title','editor','thumbnail','page-attributes'), 'taxonomies' => array( 'page'), 'has_archive' => true, 'rewrite' => array('slug' => '/', 'with_front' => false), //'rewrite' => true, //'query_var' => true, )); }
Дополнительно:
Хотелось бы, что б слагов не было
Что это значит? Чтобы тип записи не был публичным? Тогда надо указывать public false
domen.com/services/pokraska-doma - нужно - domen.com/pokraska-doma
domen.com/region/city_1 - нужно - domen.com/city_1
То есть убрать первый слаг после домена.
Есть вариант с фильтрами, но хотелось бы попробовать сделать все на основе , register_post_type, тем более что такая функция якобы есть, только как по мне где то ошибка.
А какое отношение WOO (Как стороннее расширение) - имеет к вопросу?
WOO это дополнение стороннее, это подобие интернет магазина с категориями и товарами, а речь шла о Кастомных типах записей, о которых написано в ОФИЦИАЛЬНЫХ источниках, где то, что необходимо в них заложено!
Вопрос стоял - Как разобраться, и где допущена ошибка - в коде, который повторюсь написан в ОФФ справочниках.
Ответы:
Посмотрите плагины
https://wordpress.org/plugins/remove-custom-post-t...
https://wordpress.org/plugins/remove-cpt-base/
- Да, плагины видел, но стараюсь ставить их по минимуму.
Пришлось немного изменить логику и структуру, дабы сильно не накручивать с кодом .
Нашел вот тут в коментах код, который по сути помог решить поставленную задачу (с учетом мультиязычности), но оставил его на запас.
https://wp-kama.ru/question/udalit-slug-iz-proizvo...Но за предложенный вариант Спасибо!
- На здоровье! ))
Плагин не обязательно использовать as is, из него можно извлечь "действующее вещество", хотя это не всегда просто и не всегда оправдано.
Всегда использую плагин
https://ru.wordpress.org/plugins/custom-post-type-ui/
и не парюсь
там в настройках сразу можно задать слаги и пр
при создании
- С него я начал, все делал по мануалу, ставил слаг / , пробовал все чекбоксы - ничего не помогло. Потом посмотрел в код, который он генерирует, по сути - это то, что я сам и пишу.
В итоге я отказался от плагина, так как не вижу в нем смысла.
Меня все устраивает, все работает, НО просто хотелось бы - АНАЛОГИЧНО стандартным страничкам сделать возможность в обоих Кастомных типах Создавать страницы без первого слага.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Ставить нескольким CPT
'rewrite' => ['slug' => '/']нельзя. Вы фактически пытаетесь положить разные типы записей, страницы и обычные записи в один корень URL без различимого префикса. WordPress не сможет однозначно понять, что открывать, поэтому начинаются 404 и конфликты со статическими страницами.Правильный вариант — дать каждому CPT свой уникальный slug:
add_action('init', function () { register_post_type('region', [ 'label' => 'Регионы', 'public' => true, 'has_archive' => true, 'rewrite' => [ 'slug' => 'regions', 'with_front' => false, ], 'supports' => ['title', 'editor', 'thumbnail'], ]); register_post_type('service', [ 'label' => 'Услуги', 'public' => true, 'has_archive' => true, 'rewrite' => [ 'slug' => 'services', 'with_front' => false, ], 'supports' => ['title', 'editor', 'thumbnail'], ]); });
Если очень нужен URL без префикса, это делается отдельной маршрутизацией и проверкой конфликтов, но для нескольких CPT это хрупко. Придётся вручную решать, что важнее при одинаковом slug: страница, запись, регион или услуга. Для рабочего сайта лучше использовать понятные префиксы:
/regions/name/,/services/name/. После регистрации CPT пересохраните постоянные ссылки.