Правильный способ создания целевой страницы или страницы архива для пользовательского типа записи

17 июн. 2015 г., 20:08:41
Просмотры: 14.6K
Голосов: 6

Я постоянно сталкиваюсь с проблемой при создании архивных или целевых страниц для пользовательских типов записей и хотел бы узнать, как другие решают эту задачу.

Если мне нужно создать целевую страницу для пользовательского типа записи, но при этом я хочу, чтобы архивная страница содержала редактируемый контент (т.е. была физической страницей). Мне потребуется создать пользовательский шаблон для моей архивной страницы. Проблема в том, что у этой страницы нет связи с пользовательским типом записи. Поэтому теперь мне нужно отключить стандартный архив и настроить правило перезаписи URL в соответствии с ярлыком пользовательского типа записи. Также при просмотре одиночной записи пользовательского типа, меню не понимает, что пользовательская целевая страница активна.

Есть ли у кого-то логичное решение этой проблемы?

1
Комментарии

archive-cpt.php, где cpt — это название вашего пользовательского типа записи

Brad Dalton Brad Dalton
17 июн. 2015 г. 20:11:16
Все ответы на вопрос 2
0

Для этой ситуации я создаю пользовательский шаблон страницы, например 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, рассмотрите эту форк поля.

17 июн. 2015 г. 20:38:43
0

Я бы...

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