wp_redirect () - Header wurden bereits gesendet

10

Ich versuche, wp_redirect()den Benutzer nach erfolgreichem Senden eines Anmeldeformulars auf der Seite umzuleiten.

Es funktioniert nicht und zeigt den folgenden Fehler:

Warnung: Header-Informationen können nicht geändert werden - Header, die bereits von (Ausgabe gestartet unter /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) in / Applications / MAMP / htdocs / theme / wp- gesendet wurden enthält / pluggable.php in Zeile 1178

Ich verstehe, dass es bereits zuvor Ausgaben gegeben hat, deshalb funktioniert es nicht, aber ich habe keine Ahnung, wie ich das machen soll.

Das Anmeldeformular wird von einer Funktion gerendert und von einer anderen Funktion in meiner functions.php gesendet.

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

Dann werden diese beiden Funktionen verwendet, wenn ich das Anmeldeformular anzeigen möchte.

Ich fürchte, das ist nicht das Beste. Ich sollte eine Aktion erstellen, die das tut, aber ich habe keine Ahnung, wie ich das implementieren soll. Die meisten der gefundenen Tutorials zeigen die Ergebnisse direkt auf derselben Seite und erfordern keine zusätzliche Weiterleitung. Vielleicht arbeiten sie deshalb mit Funktionen in der Datei functions.php

Schneeball
quelle

Antworten:

15

Antwort gefunden (via)

Anstatt die Funktion zu verwenden, habe ich "wp_loaded" eine Aktion hinzugefügt, die sicherstellt, dass sie geladen wird, bevor Header gesendet werden.

<?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;
    }
}     
?>
Schneeball
quelle
Der Fehler wurde behoben, aber der Beitrag wurde nicht gespeichert!
Subrata Sarkar
6

Sie müssen wp_redirect() vorher verwenden get_header() Dann wird kein Header-Fehler angezeigt.

mynamAvinash
quelle
2
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
quelle
Vielen Dank für die Hilfe, aber dieser Code hat bei mir nicht funktioniert. Musste die Aktion zu "wp_loaded" hinzufügen, damit es funktioniert (siehe meine Antwort)
Schneeball
0

Sie können dies auch tun

Anstelle der folgenden Zeile

wp_redirect ("$ url");

schreiben

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

oder

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

Es wird definitiv Ihr Problem lösen.

Hadid Graphics
quelle