Какой хук следует использовать для добавления действия, содержащего перенаправление?

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

Я хочу создать плагин, который извлекает определенные параметры URL из строки запроса, чтобы построить новую строку запроса для той же страницы. Я следую отличной книге “Профессиональная разработка плагинов для WordPress”, но не уверен, какой хук использовать для этого действия. Вот моя функция действия:

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

Какие хуки подходят для перенаправлений заголовков?

Как ответил кaiser, хук template_redirect действительно подходит для перенаправлений.

Также вам следует использовать wp_redirect() функцию, а не устанавливать заголовок.

Я бы сказал template_redirect. Но взгляните на Справочник действия.

Пример

Не забудьте exit() при перенаправлении.

/**
 * Этот пример перенаправляет все на страницу index.php
 * Вы можете сделать то же самое для панели управления с помощью admin_url( "https://wordpress.stackexchange.com/" );
 * Или просто основывайте перенаправление на условных выражениях, таких как 
 * функции is_*(), current_user_can( 'capability' ), глобальные переменные, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( "https://wordpress.stackexchange.com/" ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );

Но я бы сказал, что этот пример от kaiser не будет работать, потому что после перенаправления этот хук template_redirect будет срабатывать снова и снова, и у вас будет бесконечное перенаправление!

Лучше проверить, находитесь ли вы уже на главной странице, вот так:

function wpse12535_redirect_sample() {

    $current_url="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $site_url = get_bloginfo('siteurl') . "https://wordpress.stackexchange.com/";

    if($current_url != $site_url)       
      exit( wp_redirect( home_url( "https://wordpress.stackexchange.com/" ) ));    

}
add_action( 'template_redirect', 'wpse12535_redirect_sample');

Для меня работает хорошо. Есть какие-либо предложения? С уважением!

function custom_login_redirect( $redirect_to, $request, $user ) {

        return admin_url( 'profile.php' ); 
    }

add_filter( 'login_redirect', 'custom_login_redirect', 10, 3 );

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

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

Использование template_redirect

Когда вы хотите выполнить редирект, вы можете воспользоваться функцией wp_redirect(), которая является предпочтительным способом установки заголовков перенаправления в WordPress. В отличие от простого установленного заголовка с помощью header(), функция wp_redirect() предоставляет дополнительные преимущества, такие как автоматическое управление кодами состояния и безопасное формирование URL.

Вот пример того, как может выглядеть ваш код с использованием template_redirect:

// Ваш код плагина
add_action( 'template_redirect', 'tccl_redirect' );

function tccl_redirect() {
    // Получение параметров из URL
    $newparam = 'your_param'; // замените на нужное значение
    $newvalue = 'your_value';  // замените на нужное значение

    // Здесь вы можете добавить условия, чтобы избежать бесконечного редиректа
    if ( ! isset( $_GET[ $newparam ] ) ) {
        // Формирование нового URL
        $redirect_url = home_url( "?$newparam=$newvalue" );

        // Выполнение перенаправления
        wp_redirect( $redirect_url );
        exit; // Не забудьте завершить выполнение скрипта после перенаправления
    }
}

Важные замечания

  • Выход из функции: Используйте exit() после wp_redirect(), чтобы остановить выполнение скрипта. Это необходимо, чтобы предотвратить дальнейшую обработку страниц после редиректа.
  • Избежание бесконечного редиректа: Добавьте условия, чтобы предотвратить бесконечные циклы редиректов. Например, проверьте, существует ли уже параметр $newparam в текущем URL перед выполнением редиректа.
  • Коды состояния: По умолчанию wp_redirect() устанавливает код состояния 302 (временное перенаправление). Если вам нужно использовать код 301 (постоянное перенаправление), вы можете передать его вторым аргументом функции: wp_redirect( $url, 301 );.

Заключение

Использование хука template_redirect совместно с функцией wp_redirect() является правильным подходом для исполнения редиректов в ваших плагинах на WordPress. Обеспечивая правильные условия, вы можете эффективно управлять перенаправлениями, избегая потенциальных проблем с бесконечными циклами редиректов. Убедитесь, что ваш код соответствует стандартам безопасности и производительности, чтобы ваш плагин работал корректно.

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

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