wp_redirect não está funcionando após o envio do formulário
-
-
Difícil de adivinhar qualquer coisa dessasinformações,vocêtentou depurarpormais detalhes?[Melhores redirecionamentos HTTP] (http http] (http://wordpress.org/extend/plugins/better-http-redirets/) Plugin é umaboaferramentapara analisar osproblemas de redirecionamento.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
-
Porfavor,posteeste códigono contexto.Please post this code in context.
- 0
- 2012-12-22
- s_ha_dum
-
@s_ha_dum Eu atualizeiminhaperguntaparaincluir umapastebina@s_ha_dum I've updated my question to include a pastebin
- 0
- 2012-12-22
- Anagio
-
@Rarsteu atualizei apergunta com umapastebina detodo o código@Rarst I've updated the question with a pastebin of the entire code
- 0
- 2012-12-22
- Anagio
-
@Rarsteuinstalei oplugin Porfavor,vejaminhapostagem atualizadaexibe um 302e linkspara onovopost,masnão refrescar 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 respostas
- votos
-
- 2012-12-22
Você sópode usar
wp_redirect
antes O conteúdo éenviadopara onavegador. Se vocêfossepara ativar a depuração do PHP,veria umerro "cabeçalhosjáenviados" devido aoget_header()
naprimeira linha.em vez deprocessar oformulárionomodelo,vocêpode gancho uma ação anterior ,como
wp_loaded
e salve algumas consultaspara obanco de dados se você só vai redirecionar.editar ,exemplo -
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; }
Usando uma ação,vocêpodemanter o códigoforae separado de seusmodelos. Combineisso com um shortcodeparaproduzir oformulárioe envolvetudoem uma classepara salvar oestadoentreprocessamento/saída,e vocêpodefazertudo semtocarnosmodelosfront-end.
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 Sim Acabei de ver os cabeçalhosjáenviadosmensagem agora com depuração ativadae omelhorplugin de redirecionamento HTTP.Eunãoestoufamiliarizado com como usar osganchos,vocêpodeme apontarpara algumtutorial oumostrar algum código deexemploporfavor@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 - adicionou umexemplo@Anagio - added an example
- 0
- 2012-12-22
- Milo
-
Obrigado,então você sugere queeu coloquei oformulárioem um código curtoe use do_shortcode () dentro domodeloparaexibir oformulário.Oganchoentrariaem minhasfunções.php.O que a ação doformuláriotorna-separa disparar afunção/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
-
Vocênãoteria que usar `do_shortcode`,meupontofoi que vocêpoderia adicioná-lo através de um shortcodepara um conteúdo depost/página,entãotodo o seuprocessamentoe código de renderização é separado domodelo,dessaforma que oformuláriopodefuncionarem qualquerpágina você coloca o shice doformulário dentro do conteúdo de.A açãopode segmentar apágina atual com um `#` ouestarem branco,já que vocêestáficando * Todos os * solicitaçõespara verificar se o seuformuláriofoienviado,elefuncionará de qualquerpá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 vocêpregouissoparamim."Cabeçalhosjáenviados"foi oproblemaparamim.Obrigado@Milo you nailed this for me. "headers already sent" was the problem for me. Thanks
- 0
- 2013-09-24
- henrywright
-
- 2012-12-22
Movendo
get_header();
para aparteinferior desse código deve corrigir oproblema.Seu código seráexecutado antes de quaisquer cabeçalhos seremenviadose o redirecionamentofuncionará.// ... wp_redirect( get_permalink($pid) ); exit(); //insert taxonomies } get_header(); ?>
Eu suponho que hámais códigonapágina abaixo do que vocêpostou?Senão,não vejo anecessidade de
get_header()
em tudo.O únicobenefício queposso verpara usar umgancho como Milo sugere é que vocêpodeevitar alguma sobrecarga se vocêescolher umgancho antecipado.Vocêpoderia raspar umafração de um segundo deprocessamento.
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.
-
Sim,há alguns HTMLe algumasfunções WP Get_sideBars ()e get_footer ()etc. Eunãoestoufamiliarizado com o uso deganchos,mas realmentegostaria de ver umexemplo.Eujáestougooglinge vejopessoasfalando sobre 'add_action (' wp_loaded ',' your_function ') `mas realmentenão sei como usá-lo.Algumexemplo é apreciadograçasYes 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
-
Vouesperarpor algumtempoe ver se @Miloposta umexemplo usando umgancho,já que é a resposta dele.Senão,editominha resposta.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
-
Obrigadomovendo oget_header () abaixo do código detratamento deformulárioe redirecionarfuncionou.Eugostaria de ver como usar oganchoembora.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 que opedaço de sugestão é umpedaço de diamanteem poucaspalavras.:)explicoutudo.Eutentei muitasmaneiras -todas as coisas "wp_loaded","template_redirect",masnão conseguiamfazer as coisasfuncionarem.Muito obrigado.@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
Estou usandoeste redirecionamento depois deinserir umpost.Nãoestáfuncionando,só atualiza apágina queestánoformulário.Eu sei que o $pidestá recebendo opostidentão qual é oproblema?Este é ofinal domeu código PHPpara lidar com a submissão doformulário.
Aquiestá um pastebin do código completo
Usandomelhor redirecionamentos HTTP é a saída é,e liga apalavra
here
para opost recém-publicado correto.