Вопрос или проблема
У меня есть блог, и я меняю его на новую тему.
Старая структура 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');
Объяснение кода
-
Функция
redirect_posts()
:- Глобальная переменная
$post
позволяет получить доступ к текущему посту. - Проверка
is_single()
гарантирует, что код выполняется только на странице отдельного поста. - Условие
$post->post_type === 'post'
удостоверяется, что мы обрабатываем именно пост и никакие другие типы контента. - Используется
wp_redirect()
для выполнения 301 редиректа на новый адрес. Код состояния 301 сообщает поисковым системам, что старый URL был окончательно перемещен.
- Глобальная переменная
-
Хук
add_action('template_redirect', 'redirect_posts')
:- Хук
template_redirect
срабатывает перед загрузкой шаблона, что идеально подходит для выполнения редиректов.
- Хук
Заключение
Таким образом, данный подход к редиректам позволяет обеспечить плавный переход пользователей со старого блога на новый, улучшая пользовательский опыт и минимизируя негативное воздействие на SEO. При соблюдении всех вышеперечисленных шагов, вы сможете перенаправить только статьи, сохраняя остальные страницы в их оригинальном виде. Если возникнут трудности или потребуется дальнейшая оптимизация, рекомендуется провести дополнительные тестирования или проконсультироваться с веб-разработчиком.