wp_redirect nu funcționează după trimiterea formularului
Folosesc această redirecționare după inserarea unui post. Nu funcționează, doar reîmprospătează pagina pe care se află formularul. Știu că $pid primește ID-ul postului, deci care este problema? Acesta este sfârșitul codului meu PHP pentru gestionarea trimiterii formularului.
$pid = wp_insert_post($new_post);
update_post_meta($pid,'domain',$domain);
update_post_meta($pid,'keywords',$keywords);
wp_redirect( get_permalink($pid) );
exit();
Aici este un pastebin al codului complet
Folosind Better HTTP Redirects, rezultatul este, iar cuvântul here
este legat la noul post publicat corect.
302 Found
The document has moved here.

Poți folosi wp_redirect
doar înainte ca conținutul să fie trimis către browser. Dacă ai activa depanarea în PHP, ai vedea o eroare "headers already sent" din cauza apelului get_header()
de pe prima linie.
În loc să procesezi formularul în template, poți atașa la o acțiune mai timpurie, cum ar fi wp_loaded
, și să economisești câteva interogări la baza de date dacă intenționezi doar să redirecționezi utilizatorul.
EDITARE, exemplu-
add_action( 'wp_loaded', 'wpa76991_process_form' );
function wpa76991_process_form(){
if( isset( $_POST['my_form_widget'] ) ):
// procesează formularul, apoi
wp_redirect( get_permalink( $pid ) );
exit();
endif;
}
Folosind o acțiune, poți separa codul de template-uri. Combină acest lucru cu un shortcode pentru a afișa formularul și încadrează totul într-o clasă pentru a păstra starea între procesare și afișare, astfel poți realiza totul fără a modifica template-urile front-end.

@Miloe da, acum am văzut mesajul despre antetele deja trimise cu depanarea activată și pluginul better http redirect pornit. Nu sunt familiarizat cu utilizarea hook-urilor, poți să-mi arăți unde pot găsi un tutorial sau să-mi arăți un exemplu de cod te rog

Mulțumesc, deci sugerezi să pun formularul într-un shortcode apoi să folosesc do_shortcode() în template pentru a afișa formularul. Hook-ul ar trebui să fie adăugat în functions.php. Ce ar trebui să fie acțiunea formularului pentru a declanșa funcția/hook-ul?

nu ar trebui să folosești do_shortcode
, ideea mea era că poți să-l adaugi prin shortcode în conținutul unui articol/pagină, apoi toată logica de procesare și randare este separată de șablon, astfel formularul ar putea funcționa pe orice pagină unde plasezi shortcode-ul formularului în conținut. acțiunea poate fi direcționată către pagina curentă cu un #
, sau poate fi lăsată goală, deoarece prinși toate cererile pentru a verifica dacă formularul a fost trimis, va funcționa de pe/pe orice pagină.

Mutarea get_header();
la sfârșitul acelui cod ar trebui să rezolve problema. Codul tău se va executa înainte ca vreun antet să fie trimis și redirecționarea va funcționa.
// ...
wp_redirect( get_permalink($pid) );
exit();
//inserare taxonomii
}
get_header(); ?>
Presupun că există mai mult cod pe pagină sub ceea ce ai postat? Dacă nu, nu văd nevoia de get_header()
deloc.
Singurul beneficiu pe care îl văd în utilizarea unui hook așa cum sugerează Milo este că ai putea evita unele overhead-uri dacă alegi un hook suficient de devreme. Ai putea reduce timpul de procesare cu o fracțiune de secundă.

Da, există niște HTML și câteva funcții WordPress precum get_sidebars(), get_footer() etc. Nu sunt deloc familiarizat cu utilizarea hook-urilor, dar aș dori foarte mult să văd un exemplu. Deja caut pe Google și văd oameni vorbind despre add_action('wp_loaded', 'your_function')
, dar nu sunt sigur cum să-l folosesc. Orice exemplu este apreciat, mulțumesc.

Voi aștepta puțin și voi vedea dacă @Milo postează un exemplu folosind un hook, deoarece acesta este răspunsul său. Dacă nu, voi edita răspunsul meu.

Mulțumesc, mutarea get_header() sub codul de gestionare a formularului și redirecționarea a funcționat. Aș dori totuși să văd cum să folosesc hook-ul.
