URL-адрес архива пользовательского типа записи указывает на постоянную ссылку страницы

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

Я хотел бы, чтобы моя “страница архива пользовательского типа записи” указывала на Страницу.

Ситуация следующая:

У меня есть Страница в WordPress с постоянной ссылкой http://myurl.com/galleries. Эта страница отображает список записей с пользовательским типом записи = vmgallery. У меня есть пользовательская логика для этой страницы, которая работает нормально.

С другой стороны, эта страница работает как “страница архива пользовательского типа записи”, потому что она отображает все записи для данного пользовательского типа записи vmgallery. В настоящее время, если пользователь переходит по ссылке http://myurl.com/vmgallery/, WordPress загружает страницу архива (archive.php), вместо этого я хочу, чтобы загружалась страница http://myurl.com/galleries.

Как добиться этого?

У вас есть несколько вариантов.

1. Определите слаг архива типа записи при регистрации типа записи

Установив 'has_archive' => 'galleries', вы можете определить слаг архива пользовательского типа записи. Посмотрите документацию. Затем вы можете удалить вашу страницу “galleries”, а затем добавить и настроить archive-post_type.php

2. Отключите стандартный архив для типа записи

Отключите архив, установив 'has_archive' => false, а затем сохраните страницу для архива типа записи.

3. Перенаправьте запросы архива на вашу страницу

Вы можете постоянно перенаправлять запрос стандартного архива на вашу страницу.

function archive_to_custom_archive() {
    if( is_post_type_archive( 'post_slug' ) ) {
        wp_redirect( home_url( '/galleries/' ), 301 );
        exit();
    }
}
add_action( 'template_redirect', 'archive_to_custom_archive' );

Скажу, что первый метод хорош!

Вот код для удаления ссылки на страницу архива, не затрагивая URL отдельной записи, и вы можете создать страницу с архивным слагом.

function dg_custom_post_type_args( $args, $post_type ) {
if ( $post_type === "custom post type" ) {
    $args['rewrite'] = array(
    'with_front' => false,
    'slug' => 'slug here'
  );
}

return $args;
}
add_filter( 'register_post_type_args', 'dg_custom_post_type_args', 20, 2 );

Этот код решил мою проблему.

function redirect_cpt_archive() {
    if( is_post_type_archive( 'galleries' ) ) {
        wp_redirect( home_url( '/galleries/post-url/' ), 301 );
        exit();
    }
}
add_action( 'template_redirect', 'redirect_cpt_archive' );

В файле functions.php необходимо обновить ‘has_archive’ => true в вашем пользовательском типе записи.

ХОРОШО.

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

Как перенаправить архивную страницу пользовательского типа записи на страницу с постоянной ссылкой в WordPress

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

1. Определение пользовательского слага для архива тип записи

При регистрации пользовательского типа записи вы можете задать параметр 'has_archive', указав, что архив должен использовать определённый слаг. Например:

function create_post_type() {
    register_post_type('vmgallery', array(
        'labels' => array(
            'name' => __('Galeries'),
            'singular_name' => __('Galerie')
        ),
        'public' => true,
        'has_archive' => 'galleries', // задаем слаг для архива
        'rewrite' => array('slug' => 'vmgallery'),
        // другие параметры...
    ));
}
add_action('init', 'create_post_type');

Этот способ позволяет вам удалить существующую страницу «galleries» или изменить архитектуру сайта, чтобы можно было использовать её для отображения архивов. Так как в этом случае WordPress будет обрабатывать запросы к /vmgallery/ как запросы к /galleries/, это обеспечивает более удобный и логичный путь.

2. Отключение стандартного архива для пользовательского типа записи

Если вы хотите оставить страницу с постоянной ссылкой на уже существующей странице, вы можете отключить стандартный архив на этапе регистрации, указав 'has_archive' => false. Это предотвратит создание стандартной архивной страницы для вашего пользовательского типа записи:

function create_post_type() {
    register_post_type('vmgallery', array(
        // другие параметры...
        'has_archive' => false, // отключаем архив
    ));
}
add_action('init', 'create_post_type');

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

3. Перенаправление запросов к архиву на вашу страницу

Если вы хотите оставить функциональность стандартной архивации пользователя в WordPress, но перенаправить пользователей на вашу страницу, можно использовать функцию перенаправления с помощью wp_redirect:

function redirect_cpt_archive() {
    if (is_post_type_archive('vmgallery')) {
        wp_redirect(home_url('/galleries/'), 301);
        exit();
    }
}
add_action('template_redirect', 'redirect_cpt_archive');

Это позволяет вам оставить стандартное поведение WordPress без изменений, но при этом переадресовывать пользователей на пользовательскую страницу.

Заключение

Каждый из перечисленных методов имеет свои преимущества и недостатки. Первый вариант позволяет изменить структуру сайта так, чтобы все запросы к архиву перенаправлялись к нужной странице. Второй вариант подходит для случаев, когда вы хотите с легкостью управлять контентом на своей странице «galleries», не полагаясь на стандартные архивы. Третий вариант предоставляет возможность гибкого управления пользовательским контентом, не теряя простоты использования функционала WordPress.

Определите, что вам лучше подходит в зависимости от ваших целей, и выбирайте соответствующий метод. Если у вас возникли дополнительные вопросы или необходима помощь с реализацией, не стесняйтесь обратиться к сообществу WordPress или профессиональным разработчикам.

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

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