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» и при необходимости добавлять сюда новые.

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

Комментарий к коду
Нашу безымянную функцию требуется вызывать до отправки, так сказать, в браузер 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(); необходимо указывать для того, чтобы после перенаправления ничего лишнего не выполнилось.