301 редирект через rewrite_rules_array (не .HTACCESS)

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

Это правило работает так хорошо.

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {   
    $newrules = array();
    $newrules[ 'group/(.*)/?$' ] = 'index.php?pagename=test&group=$matches[1]';
    return $newrules + $rules;
}

Но сейчас у меня есть 2 URL.

1) www.site.com/*kitty*/

2) www.site.com/*kitty*/*images*/

Теперь, когда я посещаю: www.site.com/kitty/

Я хочу быть перенаправленным на: www.site.com/*kitty*/*images*/

Важно! Перенаправление, а не перезапись

Как я могу это сделать?

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

Конечно, чтобы выполнить переадресацию с одного URL на другой, используя WordPress и не прибегая к .htaccess, можно воспользоваться хуком template_redirect вместо rewrite_rules_array. Хук rewrite_rules_array больше подходит для задачи переписывания URL, тогда как для переадресации подходит template_redirect. Давайте разберем, как можно реализовать это на практике.

Решение задачи с использованием template_redirect

Для того чтобы перенаправить ваш первый URL (http://www.site.com/kitty/) на другой (http://www.site.com/kitty/images/), вы можете использовать следующий код в файле functions.php вашей WordPress темы или в плагине:

add_action( 'template_redirect', 'redirect_kitty_to_images' );

function redirect_kitty_to_images() {
    if ( is_page('kitty') ) {
        wp_redirect( site_url('/kitty/images/'), 301 );
        exit;
    }
}

Пояснение к коду

  1. Использование хука template_redirect: Этот хук срабатывает перед выдачей страницы. Он отлично подходит для выполнения любых переадресаций, так как мы уже знаем, какую страницу пользователь пытается посетить.

  2. Функция is_page('kitty'): Проверяет, что текущая страница — это страница с адресом kitty. Такой подход предполагает, что вы используете структуру постоянных ссылок, в которой такая страница зарегистрирована.

  3. Функция wp_redirect(): Функция WordPress, которая устанавливает заголовок для 301-переадресации и перенаправляет пользователя на указанный URL. Здесь мы используем статус код 301, что соответствует постоянной переадресации.

  4. Использование exit;: Завершает выполнение скрипта после переадресации, чтобы избежать дальнейшей обработки кода WordPress.

На что обратить внимание

  • Убедитесь, что страница kitty существует в вашей структуре страниц WordPress.
  • Проверьте, что структура переадресации применима для всех нужных страниц.
  • Всегда тестируйте изменения на стадии разработки либо на тестовой копии вашего сайта, прежде чем применять их на продуктивном сервере.

Заключение

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

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

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