フォームの送信後にwp_redirectが機能しない
-
-
この情報から何かを推測するのは難しいですが、詳細についてデバッグしようとしましたか?[Better HTTP Redirects](http://wordpress.org/extend/plugins/better-http-redirects/)プラグインは、リダイレクトの問題を調査するための優れたツールです.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
-
このコードをコンテキストに合わせて投稿してください.Please post this code in context.
- 0
- 2012-12-22
- s_ha_dum
-
@s_ha_dum質問を更新してペーストビンを追加しました@s_ha_dum I've updated my question to include a pastebin
- 0
- 2012-12-22
- Anagio
-
@Rarstコード全体のペーストビンで質問を更新しました@Rarst I've updated the question with a pastebin of the entire code
- 0
- 2012-12-22
- Anagio
-
@Rarstプラグインをインストールしました.更新された投稿を参照してください.302と新しい投稿へのリンクが表示されますが、そこで更新されません.@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 回答
- 投票
-
- 2012-12-22
コンテンツがブラウザに送信される前にのみ、
wp_redirect
を使用できます. PHPデバッグを有効にすると、最初の行にget_header()
が原因で「headersalreadysent」エラーが表示されます.テンプレートでフォームを処理する代わりに、
wp_loaded などの
以前のアクションをフックすることができます.コード>、リダイレクトするだけの場合は、いくつかのクエリをデータベースに保存します. 編集、例-
add_action( 'wp_loaded'、 'wpa76991_process_form'); 関数wpa76991_process_form(){ if(isset($ _POST ['my_form_widget'])): //フォームを処理してから、 wp_redirect(get_permalink($pid)); 出口(); endif; }
アクションを使用すると、コードをテンプレートから除外したり、テンプレートから分離したりできます.これをショートコードと組み合わせてフォームを出力し、すべてをクラスにラップして、処理と出力の間の状態を保存します.フロントエンドテンプレートに触れることなくすべてを実行できます.
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はい、デバッグが有効になっていて、より優れたhttpリダイレクトプラグインがオンになっているヘッダーがすでにメッセージを送信しているのを見ました.フックの使い方がよくわかりません.チュートリアルを教えてもらえますか、サンプルコードを見せてください.@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-例を追加@Anagio - added an example
- 0
- 2012-12-22
- Milo
-
ありがとうございます.フォームをショートコードに入れてから、テンプレート内でdo_shortcode()を使用してフォームを表示することをお勧めします.フックは私のfunctions.phpに入ります.関数/フックを起動するためのフォームのアクションはどうなりますか?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
-
`do_shortcode`を使用する必要はありません.私のポイントは、ショートコードを介して投稿/ページのコンテンツに追加でき、すべての処理およびレンダリングコードがテンプレートから分離されるため、フォームがどのような場所でも機能するということです.フォームのショートコードをコンテンツ内に配置するページ.アクションは、現在のページを「#」でターゲットにするか、空白にすることができます.フォームが送信されたかどうかを確認するために*すべての*リクエストをフックしているため、どのページからでも、どのページからでも機能します.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あなたは私のためにこれを釘付けにしました.「ヘッダーはすでに送信されています」が私にとっての問題でした.ありがとう@Milo you nailed this for me. "headers already sent" was the problem for me. Thanks
- 0
- 2013-09-24
- henrywright
-
- 2012-12-22
get_header();
をそのコードの最後に移動すると、問題が解決するはずです.コードはヘッダーが送信される前に実行され、リダイレクトが機能します.// ... wp_redirect( get_permalink($pid) ); exit(); //insert taxonomies } get_header(); ?>
あなたが投稿したものの下のページにもっとコードがあると思いますか?そうでない場合は、
get_header()
の必要性はまったくわかりません.Miloが示唆しているように、フックを使用することで私が見ることができる唯一の利点は、十分に早い段階でフックを選択すると、オーバーヘッドを回避できる可能性があることです.処理をほんの一瞬で短縮できます.
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.
-
はい、いくつかのHTMLがあり、さらにいくつかのwp関数get_sidebars()、get_footer()などがあります.フックの使用にはまったく慣れていませんが、実際に例を見てみたいと思います.私はすでにグーグルをしていて、人々が `add_action( 'wp_loaded'、 'your_function')`について話しているのを見ていますが、実際にはそれを使用する方法がわかりません.どんな例でもありがたいですYes 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
-
しばらく待って、@ Miloがフックを使用して例を投稿するかどうかを確認します.それが彼の答えだからです.そうでない場合は、回答を編集します.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
-
get_header()をフォーム処理コードの下に移動していただきありがとうございます.リダイレクトが機能しました.でもフックの使い方を見てみたいです.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その提案の一部は一言で言えばダイヤモンドの一部です.:)それはすべてを説明しました.私は多くの方法を試しました-すべての `wp_loaded`、`template_redirect`のものですが、物事を機能させることができませんでした.どうもありがとう.@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
投稿を挿入した後、このリダイレクトを使用しています.それは機能していません、それはフォームが置かれているページを更新するだけです.$pidが投稿IDを取得していることを知っているので、何が問題なのですか?これは、フォーム送信を処理するための私のphpコードの最後です.
これが完全なコードのペーストビンです
Better HTTPリダイレクトを使用すると、その出力は次のようになり、
here
という単語が新しく公開された正しい投稿にリンクされます.