301 редирект только для постов

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

У меня есть блог, и я меняю его на новую тему.

Старая структура blog.com/postname. Новая структура newblog.com/posts/postname.

Я хочу перенаправить ТОЛЬКО посты из старого блога на эту новую структуру, если это возможно без плагина.

Страницы, архивы и всё остальное, что не является отдельным постом, должны остаться в структуре newblog.com/postname.

Есть идеи?

Вам нужно будет изменить файл function.php вашей старой темы. Добавьте следующий код:

function redirect_posts() {
    global $post;
    if ($post->post_type=='post') {
        return header('location:http://newblog.com/posts/'.$post->post_name);
    }
}
add_action('wp', 'redirect_posts');

Условие if будет проверять, является ли текущая просматриваемая страница постом, и возвращает перенаправление заголовка на новый блог на основе слага старого блога.

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

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

Задача

У вас имеется старый блог с адресами вида blog.com/postname и новый блог с адресами типа newblog.com/posts/postname. Вы хотите, чтобы редиректы выполнялись только для постов, в то время как страницы и архивы сохраняли свою исходную структуру.

Решение

Вы можете внести изменения в файл functions.php вашей темы. Это позволит вам программно обрабатывать запросы и производить редиректы только для постов.

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

function redirect_posts() {
    global $post;
    // Проверяем, является ли текущий пост типом 'post'
    if (is_single() && $post->post_type === 'post') {
        // Указываем новый URL с учетом поста
        $new_url = 'http://newblog.com/posts/' . $post->post_name;
        // Выполняем 301 редирект
        wp_redirect($new_url, 301);
        exit; // Завершаем выполнение скрипта
    }
}
add_action('template_redirect', 'redirect_posts');

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

  1. Функция redirect_posts():

    • Глобальная переменная $post позволяет получить доступ к текущему посту.
    • Проверка is_single() гарантирует, что код выполняется только на странице отдельного поста.
    • Условие $post->post_type === 'post' удостоверяется, что мы обрабатываем именно пост и никакие другие типы контента.
    • Используется wp_redirect() для выполнения 301 редиректа на новый адрес. Код состояния 301 сообщает поисковым системам, что старый URL был окончательно перемещен.
  2. Хук add_action('template_redirect', 'redirect_posts'):

    • Хук template_redirect срабатывает перед загрузкой шаблона, что идеально подходит для выполнения редиректов.

Заключение

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

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

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