Правильный способ создания целевой страницы или страницы архива для пользовательского типа записи
Я постоянно сталкиваюсь с проблемой при создании архивных или целевых страниц для пользовательских типов записей и хотел бы узнать, как другие решают эту задачу.
Если мне нужно создать целевую страницу для пользовательского типа записи, но при этом я хочу, чтобы архивная страница содержала редактируемый контент (т.е. была физической страницей). Мне потребуется создать пользовательский шаблон для моей архивной страницы. Проблема в том, что у этой страницы нет связи с пользовательским типом записи. Поэтому теперь мне нужно отключить стандартный архив и настроить правило перезаписи URL в соответствии с ярлыком пользовательского типа записи. Также при просмотре одиночной записи пользовательского типа, меню не понимает, что пользовательская целевая страница активна.
Есть ли у кого-то логичное решение этой проблемы?
Для этой ситуации я создаю пользовательский шаблон страницы, например tpl-archive-page.php
.
Например, используя Advanced Custom Fields и Post Type Selector Field(*), пользователь может выбрать тип записи для подключения.
<?php
/**
* Template Name: CPT Archive Page
*/
get_header();
while (have_posts()) :
the_post();
get_template_part('content', 'page');
$archive_query_post_type = get_post_meta(get_queried_object_id(), 'cpt_archive_query_post_type', true);
if( $archive_query_post_type && is_string($archive_query_post_type) ) {
$args = array(
'post_type' => $archive_query_post_type,
'posts_per_page'=> -1,
'orderby' => 'title',
);
$archive_query = new WP_Query( $args );
if ( $archive_query->have_posts() ) {
while ( $archive_query->have_posts() ) {
$archive_query->the_post();
get_template_part('content', get_post_type() );
}
}
wp_reset_postdata();
}
endwhile;
get_footer();
Параметр has_archive
при регистрации пользовательского типа записи должен быть установлен в false
.
(*) Если вы используете ACF5/Pro, рассмотрите эту форк поля.

Я бы...
- Создал пользовательский тип записи (CPT) с параметром
'has_archive' => false
и использовал его в качестве источника "редактируемого контента". - Или использовал бы обычную "Страницу", если предпочитаете
- Затем создал бы
archive-{cpt-name}.php
в теме и выполнил запрос в этом шаблоне для данных CPT или данных "Страницы".
