wp_redirect() - headers già inviati

23 feb 2015, 13:37:34
Visualizzazioni: 47.1K
Voti: 19

Sto cercando di usare wp_redirect() per reindirizzare l'utente dopo l'invio con successo di un form di registrazione sulla pagina.

Non funziona e mostra il seguente errore:

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

Capisco che c'è già stato un output prima, ed è per questo che non funziona, ma non ho idea di come farlo funzionare.

Il form di registrazione viene renderizzato da una funzione e viene inviato da un'altra funzione, all'interno del mio functions.php.

if ( isset( $_POST['subscribe'] ) ) {
    // Invia il form e dovrebbe poi reindirizzare
    wp_redirect("/thank-you/");
    exit;
}

Poi entrambe queste funzioni vengono utilizzate dove voglio mostrare il form di registrazione.

Temo che non sia il modo migliore di procedere. Dovrei creare qualche action che lo faccia, ma non ho idea di come implementarla. La maggior parte dei tutorial che ho trovato mostrano i risultati direttamente sulla stessa pagina e non richiedono un reindirizzamento aggiuntivo. Forse è per questo che funzionano con le funzioni all'interno del functions.php

0
Tutte le risposte alla domanda 5
1
22

Trovata la risposta (via)

Invece di utilizzare la funzione direttamente, ho aggiunto un'azione a "wp_loaded", che assicura che venga caricata prima che qualsiasi header venga inviato.

<?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 feb 2015 14:08:38
Commenti

Ha risolto l'errore ma il post non è stato salvato!

Subrata Sarkar Subrata Sarkar
23 feb 2017 16:24:57
0
15

Devi utilizzare wp_redirect() prima di get_header() In questo modo non verrà mostrato l'errore di intestazione.

23 feb 2015 14:07:11
2

puoi anche fare questo

Invece della riga sottostante

wp_redirect("$url");

scrivi

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

oppure

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

Risolvierà sicuramente il tuo problema.

20 feb 2020 07:30:29
Commenti

grazie mille amico!

Marco Floriano Marco Floriano
24 ott 2023 05:50:55

prego...@MarcoFloriano

Mohammad Zaer Mohammad Zaer
24 ott 2023 18:58:43
2
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// rendi questa condizione tale da corrispondere solo quando viene inviato un modulo di registrazione
/**
 * fai le tue operazioni qui
 */
wp_redirect();//....
}
});
23 feb 2015 13:43:51
Commenti

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

Snowball Snowball
23 feb 2015 14:09:36

Funziona bene se hai bisogno di stabilire is_page_template() quando reindirizzi condizionalmente.

jaredrethman jaredrethman
2 apr 2020 08:09:40
0

Se stai creando un plugin, puoi chiamare ob_start(); all'inizio del codice del plugin oppure ob_start(); nella parte superiore del file functions.php prima che inizi il codice.

Descrizione dell'immagine

17 mar 2021 01:16:53