wp_redirect() - заголовки уже отправлены

23 февр. 2015 г., 13:37:34
Просмотры: 47.1K
Голосов: 19

Я пытаюсь использовать wp_redirect() для перенаправления пользователя после успешной отправки формы регистрации на странице.

Это не работает и показывает следующую ошибку:

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) in /Applications/MAMP/htdocs/theme/wp-includes/pluggable.php on line 1178

Я понимаю, что уже был выведен контент до этого, поэтому это не работает, но я не знаю, как исправить эту проблему.

Форма регистрации отображается с помощью одной функции и отправляется другой функцией внутри файла functions.php.

if ( isset( $_POST['subscribe'] ) ) {
    // Отправляет форму и должен выполнить перенаправление
    wp_redirect("/thank-you/");
    exit;
}

Затем обе эти функции используются там, где я хочу показать форму регистрации.

Боюсь, что это не лучшее решение. Я должен создать какое-то действие, которое выполняет это, но я не знаю, как это реализовать. Большинство уроков, которые я нашел, показывают результаты прямо на той же странице и не требуют дополнительного перенаправления. Возможно, поэтому они работают с функциями внутри functions.php

0
Все ответы на вопрос 5
1
22

Нашел ответ (источник)

Вместо непосредственного использования функции, я добавил действие к хуку "wp_loaded", что гарантирует выполнение до отправки любых заголовков.

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>
23 февр. 2015 г. 14:08:38
Комментарии

Ошибка исчезла, но запись не сохранилась!

Subrata Sarkar Subrata Sarkar
23 февр. 2017 г. 16:24:57
0
15

Вам необходимо использовать функцию wp_redirect() до вызова get_header(). Тогда ошибка заголовка не будет отображаться.

23 февр. 2015 г. 14:07:11
2

вы также можете сделать так

Вместо следующей строки

wp_redirect("$url");

напишите

echo("<script>location.href = '".$url."'</script>");

или

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

Это точно решит вашу проблему.

20 февр. 2020 г. 07:30:29
Комментарии

спасибо большое, мужик !

Marco Floriano Marco Floriano
24 окт. 2023 г. 05:50:55

не за что...@MarcoFloriano

Mohammad Zaer Mohammad Zaer
24 окт. 2023 г. 18:58:43
2
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// условие выполняется только при отправке формы регистрации
/**
 * здесь выполняется ваш код
 */
wp_redirect();//....
}
});
23 февр. 2015 г. 13:43:51
Комментарии

Спасибо за помощь, но этот код у меня не сработал. Пришлось добавить действие к "wp_loaded", чтобы он заработал (Смотрите мой ответ)

Snowball Snowball
23 февр. 2015 г. 14:09:36

Хорошо работает, если вам нужно установить is_page_template() при условном перенаправлении.

jaredrethman jaredrethman
2 апр. 2020 г. 08:09:40
0

Если вы создаёте плагин, вы можете вызвать ob_start(); в начале кода плагина или ob_start(); в верхней части файла functions.php перед началом кода

Начало буферизации вывода в WordPress

17 мар. 2021 г. 01:16:53