J'utilise cette redirection après avoir inséré un article. Cela ne fonctionne pas, cela actualise uniquement la page sur laquelle se trouve le formulaire. Je sais que le $ pid reçoit l'ID de poste, alors quel est le problème? Ceci est la toute fin de mon code php pour gérer la soumission du formulaire.
$pid = wp_insert_post($new_post);
update_post_meta($pid,'domain',$domain);
update_post_meta($pid,'keywords',$keywords);
wp_redirect( get_permalink($pid) );
exit();
Voici un Pastebin du code complet
L’utilisation de Better HTTP Redirects correspond à la sortie, et il relie Word here
à la nouvelle publication correcte.
302 Found
The document has moved here.
Vous ne pouvez utiliser que wp_redirect
avant que le contenu ne soit envoyé au navigateur. Si vous deviez activer le débogage php, vous verriez une erreur "en-têtes déjà envoyés" due à get_header()
sur la première ligne.
Plutôt que de traiter le formulaire dans le modèle, vous pouvez accrocher une action antérieure , comme wp_loaded
, et enregistrer certaines requêtes sur la base de données si vous souhaitez simplement effectuer une redirection.
EDIT, exemple-
add_action( 'wp_loaded', 'wpa76991_process_form' );
function wpa76991_process_form(){
if( isset( $_POST['my_form_widget'] ) ):
// process form, and then
wp_redirect( get_permalink( $pid ) );
exit();
endif;
}
En utilisant une action, vous pouvez conserver le code en dehors de vos modèles et les séparer. Combinez cela avec un shortcode pour générer le formulaire et le placer dans une classe afin de sauvegarder l’état entre le traitement et la sortie. Vous pouvez le faire sans toucher aux modèles frontaux.
Déplacer get_header();
au bas de ce code devrait résoudre le problème. Votre code sera exécuté avant l'envoi des en-têtes et la redirection fonctionnera.
// ...
wp_redirect( get_permalink($pid) );
exit();
//insert taxonomies
}
get_header(); ?>
Je suppose qu'il y a plus de code sur la page ci-dessous ce que vous avez posté? Sinon, je ne vois pas du tout le besoin de get_header()
.
Le seul avantage que je puisse tirer de l'utilisation d'un crochet, comme le suggère Milo, est la possibilité d'éviter certains frais généraux si vous choisissez un crochet suffisamment tôt. Vous pourriez gagner une fraction de seconde du traitement.