WordPress как запретить вывод архивной страницы custom post_type?

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

Здравствуйте, создал register_post_type() - > врачи, все прекрасно работает.
- Создал записи в этом post_type

Ссылка такого вида: site.ru/врачи/рыжих-виталий-вадимович/

хочу запретить вывод архивной страницы post_type по этой ссылке site.ru/врачи/ , как это сделать грамотно? что бы и в поисковой выдаче не выдавало. Через function.php как то ?

Дополнительно:

has_archive false прирегистрации

  • Антон Литвиненко, спасибо, все гениальное просто )
  • Антон Литвиненко, Антон а подскажите как запретить и single.php ? то есть хочу выводить на главной но без ссылок.
  • Нашел решение, что бы отключить вывод single.php надо при регистрации publicly_queryable false
  • Wordpress как запретить вывод архивной страницы custom post_type?

  • Да, добавление параметра 'query_var' => false также поможет скрыть записи custom post type от прямого доступа:

    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.

  • Нужно решить такую задачу?

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

    Заказать помощь
    Лучший ответ
    1
    Стас DB Ответ

    Да, архив 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'],
    ]);

    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;
        }
    });

    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 и дождаться переобхода.

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

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

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

    комментарий

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

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