Вопрос или проблема
Я задумался, какой будет лучший подход для установки 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');
Объяснение кода
- Получение старого URL: Используем функцию
get_permalink
, чтобы получить текущий URL поста. - Получение категорий: С помощью
get_the_category
получаем категории для текущего поста. - Формирование нового URL: Создаем новый URL по формату, включающему категорию и название поста.
- Проверка и перенаправление: Если старый и новый URL не совпадают, используем
wp_redirect
для перенаправления старого URL на новый с кодом состояния 301.
Шаг 3: Проверка на бесконечное перенаправление
Данный код уже учитывает потенциальные проблемы с бесконечными перенаправлениями, так как перенаправление выполняется только в случае, если старый и новый URL действительно различаются. Убедитесь, что по умолчанию нет других правил серверного редиректа, которые могут вызывать конфликты.
Шаг 4: Тестирование и мониторинг
После внедрения изменений обязательно протестируйте перенаправления на разных постах и категориях. Также следите за консолью и инструментами анализа SEO, такими как Google Search Console или Яндекс.Вебмастер, на наличие ошибок или недоступных страниц. Это поможет выявить проблемные URL и устранить их.
Заключение
Этого подхода должно быть достаточно для автоматического перенаправления старых URL на новые, учитывающего категории. Убедитесь, что ваши пользователи и поисковые системы могут легко находить ваши посты по новому формату ссылок. Не забывайте о резервировании данных перед внесением изменений на сайт.