wp_redirect non funziona dopo l'invio del modulo
Sto utilizzando questo reindirizzamento dopo l'inserimento di un post. Non funziona, si limita a ricaricare la pagina del modulo. So che $pid sta ottenendo l'ID del post, quindi qual è il problema? Questo è proprio alla fine del mio codice PHP per la gestione dell'invio del modulo.
$pid = wp_insert_post($new_post);
update_post_meta($pid,'domain',$domain);
update_post_meta($pid,'keywords',$keywords);
wp_redirect( get_permalink($pid) );
exit();
Ecco un pastebin del codice completo
Utilizzando Better HTTP Redirects l'output è, e collega la parola here
al nuovo post pubblicato correttamente.
302 Found
The document has moved here.

Puoi utilizzare wp_redirect
solo prima che il contenuto venga inviato al browser. Se abilitassi il debug di PHP, vedresti un errore "headers already sent" a causa di get_header()
sulla prima riga.
Invece di elaborare il form nel template, puoi agganciare un'azione precedente, come wp_loaded
, e risparmiare alcune query al database se stai per reindirizzare altrove.
MODIFICA, esempio-
add_action( 'wp_loaded', 'wpa76991_process_form' );
function wpa76991_process_form(){
if( isset( $_POST['my_form_widget'] ) ):
// elabora il form, e poi
wp_redirect( get_permalink( $pid ) );
exit();
endif;
}
Utilizzando un'azione, puoi mantenere il codice separato dai tuoi template. Combina questo con uno shortcode per generare il form e racchiudi tutto in una classe per salvare lo stato tra elaborazione/output, e potresti fare tutto senza toccare i template front-end.

@Miloe sì, ho appena visto il messaggio "headers already sent" ora con il debug attivato e il plugin better http redirect attivo. Non ho familiarità con l'uso degli hook, puoi indicarmi qualche tutorial o mostrarmi del codice di esempio per favore

Grazie, quindi mi stai suggerendo di inserire il form in uno shortcode e poi usare do_shortcode() all'interno del template per visualizzare il form. L'hook andrebbe nel mio functions.php. A cosa diventa l'action del form per attivare la funzione/hook?

non dovresti usare do_shortcode
, il mio punto era che potresti aggiungerlo tramite uno shortcode al contenuto di un post/pagina, così tutto il tuo codice di elaborazione e rendering è separato dal template, in questo modo il modulo potrebbe funzionare su qualsiasi pagina in cui inserisci lo shortcode del modulo all'interno del contenuto. L'azione può semplicemente puntare alla pagina corrente con un #
, o essere vuota, visto che stai agganciando tutte le richieste per verificare se il tuo modulo è stato inviato, funzionerà da/per qualsiasi pagina.

Spostare get_header();
in fondo al codice dovrebbe risolvere il problema. Il tuo codice verrà eseguito prima che vengano inviati gli header e il reindirizzamento funzionerà.
// ...
wp_redirect( get_permalink($pid) );
exit();
//inserisci tassonomie
}
get_header(); ?>
Presumo che ci sia altro codice nella pagina oltre a quello che hai postato? Altrimenti non vedo la necessità di get_header()
del tutto.
L'unico vantaggio che posso vedere nell'usare un hook come suggerisce Milo è che potresti evitare qualche overhead se scegli un hook abbastanza precoce. Potresti risparmiare una frazione di secondo nel processing.

Sì, c'è del codice HTML, e alcune funzioni di WordPress come get_sidebars(), get_footer() ecc. Non ho familiarità con l'uso degli hook, ma mi piacerebbe vedere un esempio. Sto già cercando su Google e vedo che si parla di add_action('wp_loaded', 'your_function')
ma non sono sicuro di come usarlo. Apprezzerei qualsiasi esempio, grazie.

Aspetterò un po' per vedere se @Milo posta un esempio usando un hook, visto che è la sua risposta. Altrimenti, modificherò la mia risposta.

Grazie, spostare get_header() dopo il codice di gestione del form e il redirect ha funzionato. Vorrei comunque vedere come usare l'hook.
