Пользовательский тип записи с тем же URL-адресом страницы

Вопрос или проблема

Я создал страницу с URL “announcements”

У меня также есть пользовательский тип записи с перезаписью, установленной на то же имя:

'rewrite' => array('slug' => 'announcements'),

Это все работает нормально.

Но здесь становится сложно. На моей странице объявлений у меня есть цикл с ссылкой на предыдущую и следующую страницу после цикла.

Так что, если я пытаюсь перейти на страницу 2, она ищет URL /announcements/page/2/, что является 404.

Мне кажется, это конфликтует с URL пользовательского типа записи.

Есть ли возможность обойти это, чтобы сделать это функциональным, или мне придется изменить либо slug CPT, либо имя страницы?

Также CPT настроен так, чтобы не иметь архива, если это имеет значение.

Вот аргументы для моего CPT:

$args = array(
        'label'                 => __( 'Announcements', 'textdomain' ),
        'description'           => __( 'Announcements Custom Post Type', 'textdomain' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields'),
        'taxonomies'            => array( 'category', 'post_tag' ),
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 4,
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'can_export'            => true,
        'has_archive'           => false,
        'exclude_from_search'   => true,
        'publicly_queryable'    => true,
        'menu_icon'             => 'dashicon-here',
        'capability_type'       => 'post',
        'rewrite' => array('slug' => 'announcements'),
    );

Спасибо

Как может быть страница 2 архивов, если вы не позволяете архивы?

Именно поэтому вы можете иметь фактическую страницу по этому URL и добавить цикл… вы добавляете этот цикл.

Если вы измените свой URL “announcements” на что-то другое, вы все равно увидите первую страницу вашего CPT, потому что, предположительно, вы добавили свой собственный пользовательский цикл.

Не следует перезаписывать свои постоянные ссылки CPT на страницу, которую вы имеете, или создавать страницу с тем же URL, что и ваша постоянная ссылка CPT. Это приводит к путанице, как вы видите в этом случае.

Если вы включите архив этого CPT, обновите свои постоянные ссылки, вы увидите, что ваш контент больше недоступен.

Я бы посоветовал изменить slug URL страницы на что-то другое. Вот как WordPress должен использоваться.

Ответ или решение

Создание индивидуального типа записей (Custom Post Type, CPT) с тем же URL-адресом, что и страница, может привести к конфликтам. Рассмотрим вашу ситуацию более подробно и предложим наиболее оптимальное решение.

Объяснение проблемы

Вы создали страницу с URL-слугом "announcements" и индивидуальный тип записей с таким же слагом. Данная конфигурация может вызывать конфликты, так как WordPress не может корректно определить, к какой сущности (странице или CPT) относится запрашиваемый URL. Проблема становится особенно заметной, когда вы пытаетесь осуществить пагинацию, например, используя ссылку на "/announcements/page/2/", что приводит к ошибке 404.

Характеристика конфликта

Конфликт происходит не только из-за совпадения слуг, но и потому, что ваш тип записей не имеет архивов (опция 'has_archive' => false). Это значит, что WordPress не сможет генерировать страницы архива для вашего CPT, так как вы ограничили его функциональность. В результате вы не можете иметь страницы с пагинацией для вашего CPT, если вы не используете уникальный URL.

Рекомендации по решению проблемы

  1. Измените слаг для страниц или CPT: Наиболее простое и надежное решение – это просто изменить слаг одной из сущностей (либо страницы, либо CPT). Например, вы можете изменить слаг вашей страницы на "news" или "updates". Это полностью устранит конфликты и позволит вам использовать пагинацию так, как задумано.

  2. Включите архив для CPT: Если вы хотите оставить слаг "announcements" для CPT, подумайте о включении архивов, изменив 'has_archive' => true. Это позволит вашему CPT иметь свою собственную страницу архива, и вы сможете реализовать пагинацию на ней. Однако это потребует дополнительной настройки и изменения структуры ваших ссылок.

  3. Используйте фильтры для обработки URL: Если вы хотите более гибко управлять URL, рассмотрите возможность использования фильтров WordPress для модификации путей. С помощью pre_get_posts вы можете управлять запросами, относящимися к вашим пользователям и CPT в зависимости от их контекста.

  4. Проверьте настройки постоянных ссылок (Permalinks): После изменений не забудьте обновить настройки постоянных ссылок в админке WordPress. Это позволит прописать новые маршруты для вашего CPT и страницы.

Заключение

Создание индивидуального типа записей с тем же слагом, что и у страницы, – это потенциальный источник путаницы и конфликтов. Наиболее разумным шагом будет изменение слага одной из сущностей или включение архивов для CPT, если это необходимо. Это поможет вам избежать ошибок и улучшит структуру вашего сайта, улучшая пользовательский опыт. В результате, ваш сайт будет работать без проблем, а ваши пользователи смогут легко находить нужные материалы.

Оцените материал
Добавить комментарий

Капча загружается...