Как устранить ошибку 404 при открытии поста (custom_post_type), связанного с родительским постом (custom_post_type)?
Делаю тестовое задание.
Столкнулся с такой ошибкой после привязки поста кастомного типа (объекты недвижимсоти) к родительскому посту кастомного типа (города) перестал открываться привязанный наследуемый пост - ошибка 404. Как всегда первым делом обновил "Настройки постоянных ссылок" -> "Сохранить изменить", но это не помогает.
Ситуация такая: существует два типа постов. 1. Объекты недвижимости slug => realty. 2. Города .slug => city Каждый объект недвижимости привязан к своему городу. Привязка работает все нормально, но...
Если привязанный пост отвязать он открывается по такому URL:
https://example.ru/realty/derevyannyj-dom-iz-brusa/ |
https://example.ru/realty/derevyannyj-dom-iz-brusa/
- все работает. realty - ярлык кастомного типа постов.
Если привязать пост к родителю в url поста появляется ярлык поста родителя, (например город Омск) /omsk/:
https://example.ru/realty/omsk/derevyannyj-dom-iz-brusa/ |
https://example.ru/realty/omsk/derevyannyj-dom-iz-brusa/
- пост перестает открываться, ошибка 404.
В чем может быть проблема? Прошу подсказать. Не могу найти информацию ни русском сегменте интернета ни в английском.
Дополнительно:
Видать не той верёвочкой привязываешь.
Ответы:
Решил вопрос следующим образом.
При регистрации кастомного типа поста, который будет играть роль потомка, нужно указать 'hierarchical' => false в функции register_post_type(). А у родителя наоборот должно быть: 'hierarchical' => true.
Когда true и там и там - не работает.
Такие дела, может кому-то пригодиться.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Ошибка 404 у custom post type после привязки к родительскому посту почти всегда связана не с самой связью, а с rewrite rules и ожиданиями по URL. Связать один CPT с другим через meta/ACF — это одно. Сделать вложенный URL вида “город/объект” — совсем другое.
Сначала проверьте базовые вещи:
public,publicly_queryableи корректныйrewrite;Пример нормальной регистрации:
register_post_type('realty', [ 'public' => true, 'has_archive' => true, 'rewrite' => [ 'slug' => 'realty', 'with_front' => false, ], 'supports' => ['title', 'editor', 'thumbnail'], ]);
Если вы просто добавили связь “объект относится к городу”, WordPress не обязан автоматически открывать объект по URL внутри города. Для этого нужны свои rewrite rules и фильтр permalink. Например, URL
/city/moscow/object/kvartira/нужно отдельно описывать правилами.Если вложенность не критична, оставьте простую структуру:
/cities/moscow/ /realty/kvartira-na-tverskoy/
А на странице города выводите связанные объекты через WP_Query по meta field. Это проще, стабильнее и реже ломает SEO.
Итог: связь между CPT не создаёт вложенный permalink автоматически. Если после привязки появился 404, проверьте rewrite, конфликт slug и flush permalinks. Если нужен вложенный URL, придётся отдельно делать rewrite rules и генерацию ссылок.