WP Costum Post Type — Как правильно создать несколько CPT?

Ссылка скопирована
1 ответ

Доброго времени суток.
Пытаюсь создать несколько кастомных типов записей, но столкнулся с проблемой в Слагах.
Суть: Хотелось бы, что б слагов не было, НО как оказалось , как только я в одном из Типов указываю

'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, тем более что такая функция якобы есть, только как по мне где то ошибка.

  • Внимай истине https://www.kobzarev.com/wordpress/woocommerce-kil...
  • Refguser,
    А какое отношение WOO (Как стороннее расширение) - имеет к вопросу?
    WOO это дополнение стороннее, это подобие интернет магазина с категориями и товарами, а речь шла о Кастомных типах записей, о которых написано в ОФИЦИАЛЬНЫХ источниках, где то, что необходимо в них заложено!
    Вопрос стоял - Как разобраться, и где допущена ошибка - в коде, который повторюсь написан в ОФФ справочниках.
  • DEVINCODE, вникни в суть. Там речь о базе в слагах. 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, из него можно извлечь "действующее вещество", хотя это не всегда просто и не всегда оправдано.

    WP Costum Post Type — Как правильно создать несколько CPT?

    Всегда использую плагин
    https://ru.wordpress.org/plugins/custom-post-type-ui/
    и не парюсь

    там в настройках сразу можно задать слаги и пр
    при создании

    • С него я начал, все делал по мануалу, ставил слаг / , пробовал все чекбоксы - ничего не помогло. Потом посмотрел в код, который он генерирует, по сути - это то, что я сам и пишу.
      В итоге я отказался от плагина, так как не вижу в нем смысла.
      Меня все устраивает, все работает, НО просто хотелось бы - АНАЛОГИЧНО стандартным страничкам сделать возможность в обоих Кастомных типах Создавать страницы без первого слага.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Ставить нескольким 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'],
        ]);
    });

    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 пересохраните постоянные ссылки.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно