Почему WordPress использует archive.php вместо page.php?
У меня есть пользовательский тип записи (CPT) под названием "Careers" с ярлыком "careers".
Я создал страницу со списком вакансий в Elementor (ярлык страницы также "careers"), добавил виджет "Записи" и использовал настройки запроса для выбора моего CPT Careers. Затем я снова использовал Elementor для создания темы одиночной записи для моих отдельных страниц вакансий. Одиночные записи работают нормально, но теперь, когда я возвращаюсь к странице со списком вакансий, я вижу архивную страницу, которая выглядит совсем не так, как страница, созданная в Elementor (видно, что страница теперь использует archive.php с плагином Reveal template). Я попытался принудительно задать шаблон, выбрав пользовательский шаблон страницы, но это не помогло. Я также пробовал сбросить постоянные ссылки - это тоже не помогло.
Когда я пытаюсь открыть свою страницу Careers в Elementor, я получаю ошибку "Preview could not be loaded Error". Если я изменю URL страницы с "careers" на "career" или "open-positions", то ошибка исчезает, и я могу открыть страницу в Elementor (с новым ярлыком).
Правильно ли предположить, что ярлык CPT не может совпадать с ярлыком страницы? Есть ли лучший способ реализовать это (желательно с одинаковым ярлыком для страницы и CPT)? Или даже с помощью Elementor pro?
Вот мой код CPT:
function create_careers_posttype() {
register_post_type( 'careers',
array(
'labels' => array(
'name' => __('Вакансии'),
'singular_name' => __('Вакансия')
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'careers'),
'show_in_rest' => true,
'supports' => array('title', 'page-attributes'),
)
);
}
add_action( 'init', 'create_careers_posttype' );

Вы не можете использовать слаг careers
в качестве слага страницы, так как он уже используется как название CPT. /careers
является архивом вашего типа записей, поэтому загружается шаблон archive.php
, а не page.php
.
Даже если бы у вас была страница с таким слагом, правило перезаписи архива имеет более высокий приоритет. Вы также найдете его в сгенерированной карте сайта, а слаг /careers
также используется для формирования постоянных ссылок для отдельных записей этого типа.
Максимум, что вы можете сделать — отключить архив.
Я попытался принудительно задать шаблон, выбрав пользовательский шаблон страницы, но это не помогло.
Это не сработает, потому что изначально отображается не страница. WordPress на основе основного запроса считает, что это архив записей типа careers
, и будет вести себя в соответствии со стандартной иерархией шаблонов, выбирая наиболее подходящий шаблон. Например, если бы был доступен archive-careers.php
, он загрузил бы его.
Помните, выбор шаблона определяется параметрами основного запроса. WordPress не загрузил страницу, потому что вы были на page.php
, а наоборот — он загрузил page.php
, потому что основной запрос указывал на страницу, и он может загрузить пользовательский шаблон страницы, если он указан для этой страницы в запросе. Но если это архив, такого не происходит. Подробнее смотрите в иерархии шаблонов.
Или даже с помощью Elementor pro?
Если вы хотите оформить этот архив с помощью Elementor, вам нужно обратиться в поддержку Elementor или задать вопрос в сообществе Elementor. Поддержка сторонних плагинов не входит в тему этого обсуждения и не входит в рамки данного стека.

Привет, Том, я не пытаюсь получить здесь поддержку по Elementor, возможно, я был недостаточно ясен, но ты ответил на мой вопрос об уникальности слагов, так что спасибо :D

Вот очень полезная ссылка для понимания https://wphierarchy.com/
