wp_redirect () - intestazioni già inviate


10

Sto cercando di utilizzare wp_redirect()per reindirizzare l'utente dopo aver inviato correttamente un modulo di iscrizione sulla pagina.

Non funziona e mostra il seguente errore:

Avviso: impossibile modificare le informazioni dell'intestazione - intestazioni già inviate da (output avviato in /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) in / Applicazioni / MAMP / htdocs / theme / wp- include / pluggable.php sulla linea 1178

Capisco che ci sia già stato un output prima, ecco perché non funziona, ma non ho idea di come farlo funzionare.

Il modulo di iscrizione viene reso da una funzione, ed è inviato da un'altra funzione, all'interno delle mie funzioni.php.

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

Quindi entrambe queste funzioni vengono utilizzate dove voglio mostrare il modulo di iscrizione.

Temo che non sia la cosa migliore da fare. Dovrei creare alcune azioni che lo fanno, ma non ho idea di come implementarlo. La maggior parte dei tutorial che ho trovato mostra i risultati direttamente sulla stessa pagina e non richiede un reindirizzamento aggiuntivo. Forse è per questo che stanno lavorando con le funzioni all'interno di Functions.php

Risposte:


15

Ho trovato la risposta (via)

Invece di usare la funzione ho aggiunto un'azione a "wp_loaded", che si assicura che venga caricata prima di inviare le intestazioni.

<?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;
    }
}     
?>

Si è sbarazzato dell'errore ma il post non è stato salvato!
Subrata Sarkar,

6

Devi usare wp_redirect() prima get_header() Quindi non mostrerà l'errore di intestazione.


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();//....
}
});

Grazie per l'aiuto, ma quel codice non ha funzionato per me. Necessario aggiungere l'azione a "wp_loaded" per farlo funzionare (vedi la mia risposta)
Snowball

Funziona bene se è necessario stabilire is_page_template()quando reindirizzare in modo condizionale.
Lawless

1

puoi anche farlo

Invece della riga sotto

wp_redirect ( "$ url");

Scrivi

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

o

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

Risolverà sicuramente il tuo problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.