Родительская страница для CPT

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

Ладно, было много тем на эту тему, но, похоже, это не работает для меня.

У меня есть одна нормальная страница, называемая “Ресурсы”.

Затем у меня есть несколько пользовательских типов записей. Один из них – “Видео”.

Я хочу, чтобы “Видео” было дочерней страницей “Ресурсов”. В данный момент я могу получить доступ к странице видео по URL: http://example.com/resources/videos И http://example.com/videos (оба работают).

Мой CPT “Видео” выглядит следующим образом:

function register_custom_post_video() {

    $labels = array(
        'name' => _x('Видео', 'videos'),
        'singular_name' => _x('Видео', 'video'),
        'add_new' => _x('Добавить новое видео', 'Video'),
        'add_new_item' => __('Добавить новое видео'),
        'edit_item' => __('Редактировать видео'),
        'new_item' => __('Новое видео'),
        'view_item' => __('Просмотреть видео'),
        'search_items' => __('Поиск видео'),
        'not_found' =>  __('Видео не найдено'),
        'not_found_in_trash' => __('Видео не найдено в корзине'),
        'parent_item_colon' => ''
    );
    
    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'resources', 'with_front' => true),
        'capability_type' => 'page',
        'hierarchical' => true,
        'menu_position' => null,
        'supports' => array('title','editor','author','excerpt','page-attributes')
    );
    
    register_post_type( 'videos' , $args );
    }
    add_action('init', 'register_custom_post_video');

Но перезапись, похоже, не работает. Также, когда я пересохраняю настройки постоянных ссылок, это не срабатывает.

Я использую archive-videos.php в качестве страницы.

Также, согласно совету WP Tuts+,

Поэтому, чтобы создать иерархический пользовательский тип записи, необходимо установить ‘page-attributes’ в массиве ‘supports’ и установить флаг ‘hierarchical’ в true. Надеюсь, это было полезно и вам!

это тоже не работает.

Я делаю что-то не так?

Вам нужно добавить ‘page-attributes’ в массив supports, например:

        'supports' => array( 'title', 'editor', 'page-attributes'),

Это даст вам функциональность родителя.

Похоже, вы хотите сохранить страницу, которая выглядит как родительская, но технически не является таковой.

Когда вы регистрируете CPT, вы можете сделать так, чтобы отдельные записи CPT выглядели как “дети” страницы, обновив ваш аргумент rewrite:

'rewrite'     => array( 'slug' => 'resources/videos' ),

“Rewrite” говорит WordPress, где хранить URL. Это обеспечит то, что ваш архив видео окажется по адресу http://example.com/resources/videos/, а отдельные видео – по адресу http://example.com/resources/videos/slug-of-a-single-video/.

Поскольку перезапись теперь установлена “под” ресурсами, вы все еще сможете редактировать страницу ресурсов как обычную страницу, а видео будет архивом CPT, который будет казаться “дочерним” по отношению к ресурсам.

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

Для организации дочерней страницы на основе пользовательского типа записи (Custom Post Type, CPT) "Видео" под обычной страницей "Ресурсы", необходимо внести несколько изменений в вашу регистрацию CPT. Давайте разберем основные шаги, чтобы это работало корректно.

Шаг 1: Измените параметры регистрации CPT

Ваш код для регистрации пользовательского типа записи "Видео" требует корректировки, чтобы правильно установить структуру URL. Кроме того, есть несколько мелких изменений, которые помогут в будущей работе с иерархией. Измените вашу функцию register_custom_post_video следующим образом:

function register_custom_post_video() {
    $labels = array(
        'name' => _x('Видео', 'videos'),
        'singular_name' => _x('Видео', 'video'),
        'add_new' => _x('Добавить новое видео', 'Video'),
        'add_new_item' => __('Добавить новое видео'),
        'edit_item' => __('Редактировать видео'),
        'new_item' => __('Новое видео'),
        'view_item' => __('Просмотреть видео'),
        'search_items' => __('Поиск видео'),
        'not_found' => __('Видео не найдены'),
        'not_found_in_trash' => __('Видео не найдены в корзине'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'resources/videos'), // Устанавливаем новый slug
        'capability_type' => 'page',
        'hierarchical' => true, // Это необходимо для иерархии
        'menu_position' => null,
        'supports' => array('title', 'editor', 'author', 'excerpt', 'page-attributes') // Убедитесь, что 'page-attributes' включен
    );

    register_post_type('videos', $args);
}
add_action('init', 'register_custom_post_video');

Шаг 2: Обновите постоянные ссылки

После внесения изменений в код регистрации CPT вам необходимо обновить настройки постоянных ссылок. Перейдите в меню "Настройки" > "Постоянные ссылки" в административной панели WordPress и просто нажмите «Сохранить изменения» без внесения изменений. Это оберегает от потенциальных проблем с доступом к новому шаблону URL.

Шаг 3: Создание страницы "Ресурсы"

Убедитесь, что у вас уже есть обычная страница "Ресурсы". Это нужно для того, чтобы общая структура URL выглядела так:

  • Главная страница видео: http://example.com/resources/videos
  • Индивидуальная страница видео: http://example.com/resources/videos/[slug-вашего-видео]

Шаг 4: Шаблон архивов

Убедитесь, что у вас есть файл шаблона archive-videos.php в вашей теме. Он необходим для отображения архива ваших видео.

<?php get_header(); ?>

<h1><?php post_type_archive_title(); ?></h1>

<?php if (have_posts()) : ?>
    <div class="videos-list">
        <?php while (have_posts()) : the_post(); ?>
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div><?php the_excerpt(); ?></div>
        <?php endwhile; ?>
    </div>
<?php else : ?>
    <p><?php _e('Нет видео для отображения'); ?></p>
<?php endif; ?>

<?php get_footer(); ?>

Заключение

Сделав данные изменения, ваши видео должны теперь правильно отображаться как дочерний тип записи под страницей "Ресурсы". Убедитесь, что вы протестировали переходы по ссылкам и проверили, что всё работает так, как ожидалось. Если проблемы все еще сохраняются, проверьте наличие конфликта с другими плагинами или темами, которые могут влиять на перезапись ссылок.

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

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