wp_redirect no funciona después de enviar el formulario
-
-
Es difícil adivinar algo apartir deestainformación,¿haintentado depurarlopara obtenermás detalles?Elplugin [Better HTTP Redirects] (http://wordpress.org/extend/plugins/better-http-redirects/)es unabuena herramientaparainvestigar losproblemas de redireccionamiento.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
-
Publiqueeste códigoen contexto.Please post this code in context.
- 0
- 2012-12-22
- s_ha_dum
-
@s_ha_dum He actualizadomi preguntaparaincluir unpastebin@s_ha_dum I've updated my question to include a pastebin
- 0
- 2012-12-22
- Anagio
-
@Rarst He actualizado lapregunta con unpastebin del código completo@Rarst I've updated the question with a pastebin of the entire code
- 0
- 2012-12-22
- Anagio
-
@Rarst Instaléel complemento,consultemi publicación actualizada,muestra un 302 yenlaces a lanuevapublicación,perono se actualiza allí@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 respuestas
- votos
-
- 2012-12-22
Solopuede utilizar
wp_redirect
antes de que el contenido seenvíe alnavegador. Si habilitara la depuración dephp,vería unerror de "encabezados yaenviados" debido aget_header()
en laprimera línea.En lugar deprocesarelformularioen laplantilla,puede enganchar una acción anterior ,como
wp_loaded
yguarde algunas consultasen labase de datos si solo va a redireccionar.EDIT ,ejemplo-
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; }
Con una acción,puedemantenerel códigofuera y separado de susplantillas. Combineesto con un código cortoparagenerarelformulario yenvolverlotodoen una claseparaguardarelestadoentreelprocesamiento y la salida,ypodría hacerlotodo sintocar lasplantillas deinterfaz.
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,sí,acabo de ver losencabezados yaenviados conelmensaje ahora con la depuración habilitada yelmejor complemento de redireccionamiento http activado.Noestoyfamiliarizado con cómo usar losganchos,¿puedeindicarme algúntutorial omostrar algún código deejemplo,porfavor?@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 - agregó unejemplo@Anagio - added an example
- 0
- 2012-12-22
- Milo
-
Gracias,por lo que sugieres quepongaelformularioen un código corto y luego use do_shortcode () dentro de laplantillaparamostrarelformulario.Elganchoiría ami functions.php.¿En qué se convierte la acción de laformapara disparar lafunción/gancho?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
-
notendría que usar `do_shortcode`,mi puntoera quepodía agregarlo através de un shortcode al contenido de unapublicación/página,luegotodo suprocesamiento y código de representación se separa de laplantilla,deesamaneraelformulariopodríafuncionaren cualquierpáginaen la que colocael código corto delformulario dentro del contenido de.la acciónpuede apuntar a lapágina actual con un `#`,oestaren blanco,ya queestá conectando *todas * las solicitudespara verificar si suformulariofueenviado,funcionará desde/hacia cualquierpágina.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,me clavasteesto."Encabezados yaenviados"fueelproblemaparamí.Gracias@Milo you nailed this for me. "headers already sent" was the problem for me. Thanks
- 0
- 2013-09-24
- henrywright
-
- 2012-12-22
Mover
get_header();
alfinal deese código debería solucionarelproblema.Su código seejecutará antes de que seenvíen losencabezados y la redirecciónfuncionará.// ... wp_redirect( get_permalink($pid) ); exit(); //insert taxonomies } get_header(); ?>
Supongo que haymás códigoen lapágina debajo de lo quepublicaste.Sino,no veo lanecesidad de
get_header()
en absoluto.El únicobeneficio quepuedo veren el uso de ungancho como sugiere Miloes queesposible quepuedaevitar algunosgastosgenerales sielige ungancho lo suficientementetemprano.Podría reducirelprocesamientoen unafracción de segundo.
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.
-
Sí,hay algo de HTML y algunasfuncionesmás de wpget_sidebars () yget_footer (),etc. Noestoyfamiliarizadoen absoluto conel uso deganchos,pero realmenteme gustaría ver unejemplo.Yaestoybuscandoen Google y veogente hablando sobre `add_action ('wp_loaded','your_function')`pero realmentenoestoy seguro de cómo usarlo.Se agradece cualquierejemplograciasYes 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
-
Esperaré unpoco y veré si @Milopublica unejemplo usando ungancho,ya queesaes su respuesta.Sino,editarémi respuesta.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
-
Graciasmoviendoelget_header () debajo del código demanejo delformulario y la redirecciónfuncionó.Sinembargo,me gustaría ver cómo usarelgancho.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_dumesa sugerenciaes unapieza de diamanteen pocaspalabras.:) Explicótodo.Intenté demuchasmaneras:todas las cosas `wp_loaded`,`template_redirect`,peronopude hacer que las cosasfuncionaran.Muchasgracias.@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
Estoy usandoeste redireccionamiento después deinsertar unapublicación.Nofunciona,solo actualiza lapáginaen la que seencuentraelformulario.Sé que $pidestá obteniendoel ID depublicación,entonces,¿cuáleselproblema?Esteeselfinal demi códigophpparamanejarelenvío delformulario.
Aquí hay un pastebin del código completo
El uso demejores redireccionamientos HTTPes su salida y vincula lapalabra
here
con lapublicación correcta reciénpublicada.