Лучший способ перенаправления категории на страницу и скрытия категории

9 сент. 2014 г., 04:45:28
Просмотры: 33.6K
Голосов: 7

У меня есть страница архива категории по адресу: http://mysite.com/news

Она отображает архив записей из категории 'news-article'

Я хочу перенаправить все запросы с http://mysite.com/category/news-article на http://mysite.com/news (чтобы первый адрес был недоступен напрямую).

Какой способ является наилучшим? Стоит ли использовать 301 редирект в файле .htaccess (или использовать плагин для этого)?

Или лучше использовать wp_safe_redirect? Если да, то какой хук действия следует использовать? Например:

add_action( 'WHICH_ACTION_HOOK??', 'adam_redirect_news' );
function adam_redirect_news () {
    // Если это категория news-article
    if ( is_category( 'news-article' ) ) {

        wp_safe_redirect( 'http://mysite.com/news' );
        exit;
    }
}
0
Все ответы на вопрос 4
0

По какой-то причине add_filter вызывает ошибку. Я использовал следующий код:

function my_page_template_redirect()
{
    if ( is_category( 'news-articles' ) ) {
        $url = site_url( '/news' );
        wp_safe_redirect( $url, 301 );
        exit();
    }
}
add_action( 'template_redirect', 'my_page_template_redirect' );
17 мая 2017 г. 08:43:07
2

Благодаря @Layka выше, я немного изменил код, и теперь он делает то, что мне нужно.

Возможно, это может быть любой фильтр, вызываемый примерно в то же время — не уверен.

/**
 * Перенаправление категории 'category/news-articles' на страницу 'News page' (по адресу http://www.example.com/news)
 *
 */
add_filter('template_redirect', 'template_redirect_filter', 10, 3);
function template_redirect_filter( $url, $term, $taxonomy ) {

    if ( is_category( 'news-articles' ) ) {

        $url = site_url( '/news' );

        wp_safe_redirect( $url, 301 );

        exit;

    }

    return $url;

}
10 сент. 2014 г. 03:23:11
Комментарии

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

Marek Marek
18 авг. 2015 г. 15:12:46

template_redirect (по моему мнению) — это лучший хук для обработки перенаправления. Обычно это последний хук перед тем, как что-либо отправляется в браузер, после которого вы уже не сможете выполнить перенаправление без ошибки. Если использовать более ранний хук, у вас может не быть доступа ко всей необходимой информации для логики (например, проверки категорий). Также лучше использовать действия (actions) для перенаправлений, а не фильтры (filters). Фильтры предназначены для возврата значения в текущий процесс. Действия — для выполнения каких-либо операций (например, перенаправления).

butlerblog butlerblog
18 мар. 2019 г. 15:21:44
1
/**
 * Перенаправляет пользователя на главную страницу при попытке просмотра рубрики
 */
function template_category_template_redirect()
{
    if( is_category()) // Проверяем, является ли текущая страница рубрикой
    {
        wp_redirect( site_url() ); // Перенаправляем на главную страницу
        die; // Прекращаем выполнение скрипта
    }
}
add_action( 'template_redirect','template_category_template_redirect' ); // Подключаем функцию к хуку template_redirect
18 мар. 2019 г. 13:55:55
Комментарии

Хотя я вижу, что это ответ на вопрос, полезно (и часто желательно) включить объяснение, почему это правильный/лучший ответ.

butlerblog butlerblog
18 мар. 2019 г. 15:15:10
0

Еще один возможный способ — использовать пользовательский шаблон в вашей Дочерней теме. Согласно иерархии шаблонов WordPress, файл должен называться category-news-article.php.

В этом файле вы можете выполнить редирект с помощью wp_safe_redirect. Например:

<?php
wp_safe_redirect('/news', 301, '');

При таком подходе только категория news-article будет перенаправлена. Все остальные категории будут работать как прежде. Это может пригодиться, если вы хотите перенаправлять каждую категорию на разный URL. Это также работает с пользовательскими типами записей, если вы назвали шаблон в соответствии с иерархией WordPress (см. ссылку выше).

9 мая 2022 г. 13:38:53