WordPress как запретить вывод архивной страницы custom post_type?
Здравствуйте, создал register_post_type() - > врачи, все прекрасно работает.
- Создал записи в этом post_type
Ссылка такого вида: site.ru/врачи/рыжих-виталий-вадимович/
хочу запретить вывод архивной страницы post_type по этой ссылке site.ru/врачи/ , как это сделать грамотно? что бы и в поисковой выдаче не выдавало. Через function.php как то ?
Дополнительно:
has_archive false прирегистрации
php
register_post_type( 'my_cpt', array(
'query_var' => false,
// другие параметры
));
Это уберет возможность обращаться к записям напрямую по их slug в URL.
Таким образом, сочетание параметров:
php
'register_post_type( 'my_cpt', array(
'public' => false,
'has_archive' => false,
'publicly_queryable' => false,
'query_var' => false
));
позволит скрыть custom post type из общего доступа и архивов, оставив возможность выводить эти записи только на нужных страницах с помощью WP_Query.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Да, архив custom post type нужно отключать на уровне регистрации типа записи. Если записи врачей должны открываться по адресу вида
/vrachi/slug/, но страница архива/vrachi/не нужна, вregister_post_type()укажитеhas_archive => false.register_post_type('doctor', [ 'labels' => [ 'name' => 'Врачи', 'singular_name' => 'Врач', ], 'public' => true, 'has_archive' => false, 'rewrite' => [ 'slug' => 'vrachi', 'with_front' => false, ], 'supports' => ['title', 'editor', 'thumbnail'], ]);
После изменения обязательно обновите правила ссылок: зайдите в Настройки → Постоянные ссылки и просто нажмите «Сохранить». Это безопасный способ сделать flush rewrite rules без кода.
Если архив уже проиндексирован, одного
has_archive => falseможет быть мало: WordPress перестанет отдавать нормальный архив, но поисковик ещё какое-то время будет помнить URL. Для SEO лучше сделать понятное поведение для/vrachi/: либо 404, либо 301 на страницу со списком врачей, если такая страница нужна пользователям.add_action('template_redirect', function () { if (is_post_type_archive('doctor')) { wp_safe_redirect(home_url('/vrachi-spisok/'), 301); exit; } });
Если отдельной страницы списка нет, редирект не нужен: пусть URL отдаёт 404. Не закрывайте такой архив только через
robots.txt, потому что это не удаляет URL из индекса корректно. Лучше убрать архив из генерации, удалить ссылки на него из меню/хлебных крошек/sitemap и дождаться переобхода.