Как сделать 301-ый редирект в WordPress при помощи функции?

от автора

в ,

Redirect 301 (Moved Permanently) — это код состояния HTTP, который означает, что страница или запрошенный ресурс был окончательно перемещён на новый адрес (URL). В основном Redirect 301 используется для перенаправления пользователей с одной страницы на другую.

Браузер в случае такого ответа перенаправляется на эту страницу, а поисковые системы обновляют свои ссылки на ресурс (говоря языком SEO, вес страницы переносится на новый URL-адрес).

Ранее я рассматривал простые примеры постоянного (окончательного) перенаправления на уровне Apache и Nginx, а в этой публикации рассмотрим пример, как это можно осуществить при помощи родных функций из ядра WordPress.

Для начинающих пользователей рекомендуется к прочтению заметка о том, как добавлять произвольный PHP-код в WordPress.

Не будем ходить вокруг да около, а сразу рассмотрим реальный пример перенаправления со старой страницы с адресом /old-page/ на новую, на адрес /new-page/ :

add_action( 'template_redirect', function() {
	if( is_page( "old-page" ) ){
		wp_redirect( "http://example.ru/new-page/", 301 );
		exit;
	}
} );

Для удобства можно назвать сниппет «Перенаправления 301» и при необходимости добавлять сюда новые.

snippet php

После активации сниппета WordPress будет перенаправлять нас на новый адрес. В этом можно убедиться при просмотре заголовков из ответа сервера:

браузер DevTools

Комментарий к коду

Нашу безымянную функцию требуется вызывать до отправки, так сказать, в браузер HTML. Для этого вполне подходит хук ‘template_redirect’

Событие удобно использовать для перенаправления, когда WordPress обработал основной запрос и установил все объекты ($wp_query, $post, условные теги), но вывод контента на экран еще не произошёл.

https://wp-kama.ru/hook/template_redirect

Функция is_page() помогает проверить текущую страницу согласно условию и выполнить код только исключительно на ней. В примере я использую проверку по слагу (slug) — эта та часть URL, которая идентифицирует данную страницу.

Но так же в функцию is_page() можно передавать и «айдишник». Возможно вам будет полезно прочесть: Как узнать ID страницы?

Если стоит задача осуществить перенаправление внутри сайта, то можно ради разнообразия, рассмотреть ещё и вот такой вариант:

add_action( 'template_redirect', function() {
	if( is_page( 2 ) ){
		wp_redirect( get_permalink( 14 ), 301 );
		exit; // или die();
	}
} );

Перед нами решение той же задачи, но немного другим путём. Мы указали ID-страниц для условия и получения постоянной ссылки с помощью функции get_permalink()

exit; или die(); необходимо указывать для того, чтобы после перенаправления ничего лишнего не выполнилось.

Буду признателен за Share 🙏


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *