wp_redirect ne fonctionne pas après la soumission du formulaire
-
-
Difficile de deviner quoi que ce soit àpartir de cesinformations,avez-vousessayé de le déboguerpourplus de détails?Leplugin [Better HTTP Redirects] (http://wordpress.org/extend/plugins/better-http-redirects/)est unbon outilpourexaminer lesproblèmes de redirection.Hard to guess anything from this information, have you tried to debug it for more details? [Better HTTP Redirects](http://wordpress.org/extend/plugins/better-http-redirects/) plugin is good tool to look into redirect issues.
- 2
- 2012-12-22
- Rarst
-
Veuillezposter ce codeen contexte.Please post this code in context.
- 0
- 2012-12-22
- s_ha_dum
-
@s_ha_dum J'aimis àjourma questionpourinclure unpastebin@s_ha_dum I've updated my question to include a pastebin
- 0
- 2012-12-22
- Anagio
-
@Rarst J'aimis àjour la question avec unpastebin detout le code@Rarst I've updated the question with a pastebin of the entire code
- 0
- 2012-12-22
- Anagio
-
@Rarstj'aiinstallé leplugin s'il vousplaît voirmonpostmis àjouril affiche un 302et des liens vers lenouveaupostmaisne se rafraîchitpas là@Rarst I installed the plugin please see my updated post it displays a 302 and links to the new post but doesn't refresh there
- 0
- 2012-12-22
- Anagio
-
2 réponses
- votes
-
- 2012-12-22
Vousne pouvez utiliser
wp_redirect
qu'avant que le contenune soitenvoyé aunavigateur. Si vous deviez activer le débogagephp,vous verriez uneerreur "en-têtes déjàenvoyés"en raison deget_header()
sur lapremière ligne.Plutôt que detraiter leformulaire dans lemodèle,vouspouvez accrocher une action antérieure ,comme
wp_loaded
,et enregistrez certaines requêtes dans labase de données si vous souhaitez simplement rediriger.MODIFIER ,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,vouspouvezgarder le code hors de vosmodèleset séparé de ceux-ci. Combinez cela avec un shortcodepour afficher leformulaireet envelopper letout dans une classepourenregistrer l'étatentre letraitement/la sortie,et vouspouveztoutfaire sanstoucher auxmodèlesfrontaux.
You can only use
wp_redirect
before content is sent to the browser. If you were to enable php debugging you'd see a "headers already sent" error due toget_header()
on the first line.Rather than process the form in the template, you can hook an earlier action, like
wp_loaded
, and save some queries to the db if you're just going to redirect away.EDIT, example-
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; }
Using an action, you can keep the code out of and separated from your templates. Combine this with a shortcode to output the form and wrap it all in a class to save state between processing/output, and you could do it all without touching the front end templates.
-
@Miloe oui,je viens de voir lesen-têtes déjàenvoyés avec le débogage activéet lemeilleurplugin de redirection http activé.Jene saispas comment utiliser les hooks,pouvez-vousme diriger vers untutoriel oumontrer unexemple de code s'il vousplaît@Miloe yes I just saw the headers already sent message now with debugging enabled and the better http redirect plugin on. I'm not familiar with how to use the hooks, can you point me to some tutorial or show some example code please
- 0
- 2012-12-22
- Anagio
-
@Anagio - a ajouté unexemple@Anagio - added an example
- 0
- 2012-12-22
- Milo
-
Merci,alors vous suggérez demettre leformulaire dans un code court,puis d'utiliser do_shortcode () dans lemodèlepour afficher leformulaire.Le crochetirait dansmonfunctions.php.Que devient l'action duformulairepour déclencher lafonction/crochet?Thanks, so your suggesting I put the form into a short code then use do_shortcode() within the template to display the form. The hook would go into my functions.php. What does the action of the form become to fire the function/hook?
- 0
- 2012-12-23
- Anagio
-
vousn'auriezpas à utiliser `do_shortcode`,monpoint était que vouspouviez l'ajouter via un shortcode au contenu d'un article/page,puistout votre code detraitementet de renduest séparé dumodèle,de cettefaçon leformulairepourraitfonctionner surn'importe quelpage dans laquelle vousplacez le shortcode duformulaire dans le contenu de.l'actionpeut simplement cibler lapage actuelle avec un «#»,ou être vide,puisque vous accrochez *toutes * les demandespour vérifier si votreformulaire a été soumis,ilfonctionnera de/versn'importe quellepage.you wouldn't have to use `do_shortcode`, my point was that you could add it via a shortcode to a post/page's content, then all your processing and rendering code is separated from the template, that way the form could work on any page you place the form's shortcode within the content of. the action can just target the current page with a `#`, or be blank, since you're hooking *all* requests to check if your form was submitted, it will work from/to any page.
- 1
- 2012-12-23
- Milo
-
@Milotu as cloué çapourmoi."en-têtes déjàenvoyés" était leproblèmepourmoi.Merci@Milo you nailed this for me. "headers already sent" was the problem for me. Thanks
- 0
- 2013-09-24
- henrywright
-
- 2012-12-22
Déplacer
get_header();
vers lebas de ce code devrait résoudre leproblème.Votre code s'exécutera avant l'envoi desen-têteset la redirectionfonctionnera.// ... wp_redirect( get_permalink($pid) ); exit(); //insert taxonomies } get_header(); ?>
Je suppose qu'il y aplus de code sur lapage ci-dessous ce que vous avezpublié?Sinon,je ne voispas dutout lanécessité de
get_header()
.Le seul avantage queje peux voir à l'utilisation d'un crochet comme le suggère Miloest que vouspourrezpeut-être éviter desfraisgénéraux si vous choisissez un crochet suffisammenttôt.Vouspourriez réduire letemps detraitement d'unefraction de seconde.
Moving
get_header();
to the bottom of that code should fix the problem. Your code will execute before any headers are sent and the redirect will work.// ... wp_redirect( get_permalink($pid) ); exit(); //insert taxonomies } get_header(); ?>
I assume there is more code on the page below what you posted? If not I don't see the need for
get_header()
at all.The only benefit I can see to using a hook as Milo suggests is that you might be able to avoid some overhead if you pick an early enough hook. You could shave a fraction of a second off of processing.
-
Oui,il y a du HTML,et d'autresfonctions wpget_sidebars (),et get_footer ()etc. Jene suispas dutoutfamilier avec l'utilisation des hooksmaisj'aimerais vraiment voir unexemple.Je cherche déjà surgoogleet je vois desgensparler de `add_action ('wp_loaded','your_function')`maisje ne sais vraimentpas comment l'utiliser.Tous lesexemples sont appréciésmerciYes there's some HTML, and some more wp functions get_sidebars(), and get_footer() etc. I'm not at all familiar with using hooks but would really like to see an example. I'm already googling and see people talking about `add_action('wp_loaded', 'your_function')` but really not sure how to use it. Any examples is appreciated thanks
- 0
- 2012-12-22
- Anagio
-
Je vais attendre unmomentet voir si @Milopublie unexempleen utilisant un hook,puisque c'est sa réponse.Sinon,je modifieraima réponse.I'll wait awhile and see if @Milo posts an example using a hook, since that is his answer. If not, I'll edit my answer.
- 0
- 2012-12-22
- s_ha_dum
-
Merci de déplacerget_header () sous le code degestion duformulaireet la redirection afonctionné.J'aimerais cependant voir comment utiliser le crochet.Thanks moving the get_header() below the form handling code and redirect worked. I would like to see how to use the hook though.
- 0
- 2012-12-22
- Anagio
-
@s_ha_dum cemorceau de suggestionest unmorceau de diamanten unmot.:) Celaexpliquaittout.J'aiessayé denombreusesfaçons -toutes les choses `wp_loaded`,`template_redirect`,maisje n'aipaspufairefonctionner les choses.Mercibeaucoup.@s_ha_dum that piece of suggestion is a piece of diamond in a nutshell. :) It explained everything. I tried a lots of ways - all the `wp_loaded`, `template_redirect` things, but could not make things work. Thanks a lot.
- 0
- 2015-04-27
- Mayeenul Islam
J'utilise cette redirection après avoirinséré unmessage.Celane fonctionnepas,cela actualise uniquement lapage sur laquelle setrouve leformulaire.Je sais que $pid obtient l'identifiant de lapublication,alors quelest leproblème?C'est latoutefin demon codephppourgérer la soumission duformulaire.
Voici un pastebin du code complet
En utilisant Better HTTP Redirects,sa sortieest,et elle lie lemot
here
aubon articlenouvellementpublié.