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

10

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

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

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) в / Applications / MAMP / htdocs / theme / wp- включает / pluggable.php в строке 1178

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

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

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

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

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

Снежок
источник

Ответы:

15

Нашел ответ (через)

Вместо того, чтобы использовать функцию, я добавил действие в «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;
    }
}     
?>
Снежок
источник
Избавился от ошибки но пост не сохранил!
Субрата Саркар
6

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

mynamAvinash
источник
3
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});
Абхисек Малакар
источник
Спасибо за помощь, но этот код не работал для меня. Нужно добавить действие в "wp_loaded", чтобы оно заработало (см. Мой ответ)
Snowball
Хорошо работает, если нужно установить is_page_template()при условном перенаправлении.
Лоулесс
1

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

Вместо строки ниже

wp_redirect ( "$ URL");

записывать

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

или

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

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

Хадид графика
источник