Перенаправление URL архивной страницы произвольного типа записи на URL страницы

1 мар. 2016 г., 13:43:01
Просмотры: 21.3K
Голосов: 4

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

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

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

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

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

0
Все ответы на вопрос 3
4
12

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

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

Установив 'has_archive' => 'galleries', вы можете определить собственный slug архива для типа записи. Ознакомьтесь с документацией. Затем вы можете удалить вашу страницу "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' );

Я бы сказал, что первый вариант хорош!

1 мар. 2016 г. 13:58:16
Комментарии

Не могли бы вы подсказать, какой вариант будет лучше, если у меня также есть "пользовательская таксономия для этого пользовательского типа записей" (название пользовательской таксономии — 'gallery_categories', пример категории галереи — "auto"). И я хочу, чтобы http://myurl.com/galleries/auto работало так же, как http://myurl.com/galleries. Я хочу, чтобы у них был почти одинаковый код (код должен проверять, является ли это 'galleries' или 'galleries'/xxx, и действовать практически одинаково с небольшими различиями)?

renathy renathy
1 мар. 2016 г. 14:08:32

Архив пользовательского типа записей и архив пользовательской таксономии — это разные вещи. Первый вариант всегда хорош, но он не будет работать как http://myurl.com/galleries/auto Вы не сможете получить результаты для термина auto. Для этого вам понадобится пользовательский шаблон страницы и перезапись URL, чтобы обрабатывать запрос как http://example.com/page-name/?mytax=auto

Sumit Sumit
1 мар. 2016 г. 14:15:07

А что, если вам нужно перевести "galleries" :))

trainoasis trainoasis
18 июл. 2018 г. 18:23:32

Отлично. У меня сработал только третий вариант, потому что мой случай касался перенаправления запроса архива на определённый пост этого типа записи. Поэтому я добавил home_url( '/galleries/some-post-slug' ) внутри метода wp_redirect(), и это сработало. Спасибо

Adriana Hernández Adriana Hernández
22 февр. 2019 г. 23:01:26
0

Ниже приведен код для удаления ссылки на архивную страницу, не затрагивая 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 );
19 янв. 2019 г. 19:18:10
0

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

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' );

В вашем типе записи (custom post type) в файле functions.php необходимо обновить параметр 'has_archive' => true.

28 окт. 2024 г. 20:28:01