Создайте 301 редирект автоматически при добавлении %category% в постоянную ссылку.

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

Я задумался, какой будет лучший подход для установки 301 редиректов. У меня около тысячи записей в блоге и 19 категорий, так что настраивать их индивидуально – это проблема. Хотя настройка 19 возможных комбинаций категорий вполне приемлема, я предпочел бы, чтобы они работали автоматически. Структура URL в моих настройках – /%postname%/. Я также модифицирую постоянную ссылку с помощью этого кода.

function filter_post_link($permalink, $post) {
    if ($post->post_type != 'post' || has_category('webinars', $post->ID))
        return $permalink;
    return 'blog'.$permalink;
}
add_filter('pre_post_link', 'filter_post_link', 10, 2);

Сказав это, в настоящее время мой веб-сайт выглядит как example.com/blog/sample-post/. Однако вскоре мне нужно будет, чтобы он содержал категории в URL. Это может выглядеть следующим образом:

  • example.com/blog/cat1/sample-post/
  • example.com/blog/cat1/cat2/sample-post-2/
  • example.com/blog/cat1/cat2/cat3/sample-post-3/

Если я изменю структуру URL на /%category%/%postname%/, старый URL и новый URL будут работать. Например, example.com/blog/sample-post/ и example.com/blog/cat1/sample-post/ работают. Теперь мне нужно убедиться, что старый URL будет перенаправлен на новый. Какой будет лучший способ?


Обновление: Попробовал следующее

function test_template_redir(){
    if (get_post()->post_type === 'post'){
        global $wp;
        $var = get_permalink( get_the_ID() ); //получает полный URL
        $current_url = home_url(add_query_arg(array(), $wp->request));

        if($var != $current_url){
            wp_redirect( $var );
            exit;
        }
    }
}
add_action( 'template_redirect', 'test_template_redir' );

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

как вы решили эту проблему с изменением постоянной ссылки с категорией? спасибо

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

Чтобы эффективно перенаправить старые URL-адреса на новые с добавлением категорий в структуру постоянных ссылок вашего блога, примените следующий подход, который избегает проблем с бесконечными перенаправлениями. Рассмотрим все аспекты вопроса с точки зрения профессиональной разработки на WordPress и SEO.

Проблема

Вы имеете существующий URL-формат example.com/blog/sample-post/, который нужно изменить на example.com/blog/cat1/sample-post/, где cat1 – это категория, к которой относится публикация. Вы уже создали функцию filter_post_link, чтобы отобразить новые URL, но возникает необходимость настроить 301 перенаправление с учетом того, что у вас более 1000 постов и 19 категорий.

Решение

Шаг 1: Изменение структуры постоянных ссылок

Как вы уже упомянули, структура постоянных ссылок изменена на /%category%/%postname%/. Это первый шаг в решении задачи. Теперь необходимо настроить перенаправление старых ссылок на новые.

Шаг 2: Настройка 301 перенаправления

Теперь следует создать функционал для автоматического 301 перенаправления старых URL на новые. Это делается в WordPress с помощью фильтров и хуков. Вам нужно изменить код для перенаправления, чтобы избежать бесконечных циклов.

Вот пример кода, который можно добавить в файл functions.php вашей темы:

function custom_redirect_old_urls() {
    if (is_singular('post')) {
        global $post;

        // Получаем старый URL
        $old_url = get_permalink($post->ID); // старый URL
        $categories = get_the_category($post->ID); // получаем категории поста
        $new_category_slug = '';

        // Получаем новую категорию (выбираем только первую категорию)
        if (!empty($categories) && isset($categories[0])) {
            $new_category_slug = $categories[0]->slug; // Получаем слаг первой категории
        }

        // Формируем новый URL
        $new_url = home_url('/blog/' . $new_category_slug . '/' . $post->post_name . '/');

        // Если старый и новый URL не совпадают, перенаправляем
        if ($old_url !== $new_url) {
            wp_redirect($new_url, 301);
            exit;
        }
    }
}
add_action('template_redirect', 'custom_redirect_old_urls');

Объяснение кода

  1. Получение старого URL: Используем функцию get_permalink, чтобы получить текущий URL поста.
  2. Получение категорий: С помощью get_the_category получаем категории для текущего поста.
  3. Формирование нового URL: Создаем новый URL по формату, включающему категорию и название поста.
  4. Проверка и перенаправление: Если старый и новый URL не совпадают, используем wp_redirect для перенаправления старого URL на новый с кодом состояния 301.

Шаг 3: Проверка на бесконечное перенаправление

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

Шаг 4: Тестирование и мониторинг

После внедрения изменений обязательно протестируйте перенаправления на разных постах и категориях. Также следите за консолью и инструментами анализа SEO, такими как Google Search Console или Яндекс.Вебмастер, на наличие ошибок или недоступных страниц. Это поможет выявить проблемные URL и устранить их.

Заключение

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

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

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