wp_redirect funktioniert nach dem Absenden des Formulars nicht
-
-
Haben Sie versucht,diese Informationenfür weitere Details zu debuggen?Das Plugin [Bessere HTTP-Weiterleitungen] (http://wordpress.org/extend/plugins/better-http-redirects/)istein gutes Werkzeug,um Weiterleitungsprobleme zu untersuchen.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
-
Bitteposten Sie diesen Codeim Kontext.Please post this code in context.
- 0
- 2012-12-22
- s_ha_dum
-
@s_ha_dum Ich habemeine Frage aktualisiert undeinen Pastebin hinzugefügt@s_ha_dum I've updated my question to include a pastebin
- 0
- 2012-12-22
- Anagio
-
@Rarst Ich habe die Fragemit einem Pastebin desgesamten Codes aktualisiert@Rarst I've updated the question with a pastebin of the entire code
- 0
- 2012-12-22
- Anagio
-
@Rarst Ich habe das Plugininstalliert. Inmeinem aktualisierten Beitrag wirdein 302 angezeigt undes werden Links zumneuen Beitrag angezeigt,der dortjedochnicht aktualisiert wird@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 Antworten
- Stimmen
-
- 2012-12-22
Sie können
wp_redirect
nur verwenden,bevor Inhalte an den Browsergesendet werden. Wenn Sie das PHP-Debugging aktivieren,wirdin derersten Zeile der Fehler "Headerbereitsgesendet" aufgrund vonget_header ()
angezeigt.Anstatt das Formularin der Vorlage zu verarbeiten,können Sie eine frühere Aktioneinbinden ,z. B.
wp_loaded
und speichern Sieeinige Abfragenin der Datenbank,wenn Sienur umleitenmöchten.BEARBEITEN ,Beispiel-
add_action ('wp_loaded','wpa76991_process_form'); Funktion wpa76991_process_form () { if (isset ($ _POST ['my_form_widget'])): //Formular verarbeiten und dann wp_redirect (get_permalink ($pid)); Ausfahrt(); endif; }}
Miteiner Aktion können Sie den Code aus Ihren Vorlagen heraushalten und von diesentrennen. Kombinieren Sie diesmit einem Shortcode,um das Formular auszugeben,und wickeln Sie allesin eine Klasseein,um den Status zwischen Verarbeitung/Ausgabe zu speichern. Sie können dies allestun,ohne die Front-End-Vorlagen zuberühren.
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 Ja,ich habegeradegesehen,dass die Headerbereitseine Nachrichtmit aktiviertem Debugginggesendet haben und dasbessere http-Umleitungs-Plugin aktiviertist.Ichbin nichtmit der Verwendung der Hooks vertraut. Können Siemich aufein Tutorial verweisen odereinen Beispielcode zeigen?@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 -ein Beispiel hinzugefügt@Anagio - added an example
- 0
- 2012-12-22
- Milo
-
Vielen Dank,also schlagen Sie vor,dassich das Formularin einen Funktionscodeeinfüge und dann do_shortcode ()in der Vorlage verwende,um das Formular anzuzeigen.Der Hook würdein meinefunctions.phpgehen.Wasbewirkt die Aktion des Formulars,um die Funktion/den Hook auszulösen?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
-
Siemüsstennicht "do_shortcode" verwenden. Mein Punkt war,dass Siees übereinen Shortcode zum Inhalteines Posts/einer Seite hinzufügen können. Dann wird Ihrgesamter Verarbeitungs- und Rendering-Code von der Vorlagegetrennt,sodass das Formular aufjedemfunktionieren kannSeiteplatzieren Sie den Shortcode des Formularsim Inhalt von.Die Aktion kannnur auf die aktuelle Seitemit einem "#" abzielen oder leer sein,da Sie * alle * Anforderungen verknüpfen,um zu überprüfen,ob Ihr Formulargesendet wurde. Siefunktioniert von/zujeder Seite.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
-
@ Milo du hast dasfürmichgenagelt."Headerbereitsgesendet" war das Problemfürmich.Vielen Dank@Milo you nailed this for me. "headers already sent" was the problem for me. Thanks
- 0
- 2013-09-24
- henrywright
-
- 2012-12-22
Wenn Sie
get_header();
an den unteren Rand dieses Codes verschieben,sollte das Problembehoben sein.Ihr Code wird ausgeführt,bevor Headergesendet werden,und die Umleitungfunktioniert.// ... wp_redirect( get_permalink($pid) ); exit(); //insert taxonomies } get_header(); ?>
Ichgehe davon aus,dass sich auf der Seite unter dem,was Siegepostet haben,mehr Codebefindet.Wennnicht,seheich überhaupt keine Notwendigkeitfür
get_header()
.Dereinzige Vorteil,denichbei der Verwendungeines Hakens sehen kann,wie Milo vorschlägt,besteht darin,dass Siemöglicherweise Overhead vermeiden können,wenn Siefrühgenugeinen Haken auswählen.Sie könnteneinen Bruchteileiner Sekunde der Verarbeitung sparen.
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.
-
Ja,esgibt etwas HTML undeinige weitere wp-Funktionenget_sidebars () undget_footer () usw. Ichbin überhauptnichtmit der Verwendung von Hooks vertraut,würde abergerneein Beispiel sehen.Ichgooglebereits und sehe Leute,die über "add_action" ("wp_loaded","your_function") sprechen,aberichbin mirnicht sicher,wieiches verwenden soll.Alle Beispiele wirdgeschätzt,dankeYes 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
-
Ich werdeeine Weile warten und sehen,ob @Miloein Beispielmit einem Hook veröffentlicht,da dies seine Antwortist.Wennnicht,werdeichmeine Antwortbearbeiten.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
-
Dank des Verschiebens vonget_header () unter den Codefür die Formularverarbeitung und der Umleitung hatfunktioniert.Ich würdegerne sehen,wieman den Hakenbenutzt.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 dieser Vorschlagistein Stück Diamant auf den Punktgebracht.:) Es hat alleserklärt.Ich habe viele Möglichkeiten ausprobiert - alle "wp_loaded" -,"template_redirect" -Dinge,aberich konnte die Dingenicht zum Laufenbringen.Vielen Dank.@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
Ich verwende diese Weiterleitung,nachdemicheinen Beitrageingefügt habe.Esfunktioniertnicht,es aktualisiertnur die Seite,auf der sich das Formularbefindet.Ich weiß,dass $pid die Post-IDerhält. Wo liegt also das Problem?Diesist das Endemeines PHP-Codesfür die Bearbeitung des Formulars.
Hieristein Pastebin des vollständigen Codes
Verwenden von Better HTTP Redirects Die Ausgabeerfolgt und das Wort
here
wirdmit dem richtigenneu veröffentlichten Beitrag verknüpft.