wp_redirect () - nagłówki już wysłane

10

Próbuję użyć wp_redirect()do przekierowania użytkownika po pomyślnym przesłaniu formularza rejestracji na stronie.

To nie działa i wyświetla następujący błąd:

Ostrzeżenie: nie można modyfikować informacji nagłówka - nagłówki już wysłane przez (wyjście rozpoczęte w /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) w / Applications / MAMP / htdocs / theme / wp- zawiera / pluggable.php w linii 1178

Rozumiem, że było już wcześniej, dlatego nie działa, ale nie mam pojęcia, jak to zrobić.

Formularz rejestracyjny jest renderowany przez funkcję i jest przesyłany przez inną funkcję w mojej funkcji.php.

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

Następnie obie te funkcje są używane tam, gdzie chcę wyświetlić formularz rejestracji.

Obawiam się, że nie jest to najlepsza rzecz do zrobienia. Powinienem stworzyć jakieś działanie, które to robi, ale nie mam pojęcia, jak to zaimplementować. Większość samouczków, które znalazłem, pokazują wyniki bezpośrednio na tej samej stronie i nie wymagają dodatkowego przekierowania. Być może dlatego pracują z funkcjami wewnątrz funkcji.php

Śnieżna kula
źródło

Odpowiedzi:

16

Znaleziono odpowiedź (przez)

Zamiast używania funkcji dodałem akcję do „wp_loaded”, która zapewnia, że ​​zostanie załadowana przed wysłaniem nagłówków.

<?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;
    }
}     
?>
Śnieżna kula
źródło
Pozbył się błędu, ale post nie został zapisany!
Subrata Sarkar
6

Musisz użyć wp_redirect() wcześniej. get_header() To nie wyświetli błędu nagłówka.

mynamAvinash
źródło
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();//....
}
});
Abhisek Malakar
źródło
Dzięki za pomoc, ale ten kod nie działał dla mnie. Musiałem dodać akcję do „wp_loaded”, aby ją uruchomić (Zobacz moją odpowiedź)
Snowball
Działa dobrze, jeśli musisz ustalić is_page_template()warunkowe przekierowanie.
Lawless
1

możesz także to zrobić

Zamiast dolnej linii

wp_redirect („$ url”);

pisać

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

lub

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

To na pewno rozwiąże twój problem.

Hadid Graphics
źródło