1

私は現在 wordpress 3.5 を使用しており、独自のページ テンプレートを作成しています。そのテンプレートに独自のフォームがあり、送信ボタンをクリックすると、データがデータベースに正常に保存されます。残念ながら、ブラウザの F5 キーまたは更新ボタンをクリックすると、続行するとフォームが二重に送信されるという警告が表示されます。

通常、「送信後に同じページにリダイレクトする」手法を使用してこれを防ぎます。しかし、エラーが発生するため、リダイレクトに header("location: ") を使用できません:警告: ヘッダー情報を変更できません - ヘッダーは既に によって送信されています。おそらく、リダイレクトを妨げる他のワードプレスファイルにエコーがあります。

これを解決する方法を知っている人はいますか?または、リダイレクト以外の二重フォーム送信を防ぐための他の手法を知っている人はいますか?

4

2 に答える 2

1

私は常にJavascriptでこれを行ってきました:

<?php if(isset($_POST['submit_flag'])){ ?>

<script type='text/javascript'>
    window.location='URL';
</script>

<?php } ?>

しかし、考えてみると、テーマの他の部分には含まれていない別の PHP ページをテーマのどこかに簡単に作成して、フォーム データを処理し、フォームにリダイレクトすることができます。

また、「wp-blog-header.php」を要求するだけで、ヘッダーを送信せずに $wpdb をインクルードできることも約 98% 確信しています。

于 2013-01-10T07:05:19.877 に答える
0

テンプレートファイル以外に出力はありません。それは何でしょう?あなたのウェブサイトのソースコードを見てください。Wordpress に作成するように指示したものだけです。

それが最初です: 最初に呼び出されるテンプレート ファイルの先頭で header("Location: ") を使用できます。通常は header.php です。

次に、フックを使用してフォームを処理できます (通常は使用する必要があります)。例えば:

add_action( 'init', function() { 
    // Handle stuff
} );

しかし、おそらく別のフックを使用します(ベストプラクティスは思い出せません)。あちこちのチュートリアルで提案が得られます。この場合、出力がある前に必ず header("Location: " ) を呼び出します。あなたのテーマはまだ関与していません。

于 2013-01-10T05:00:19.923 に答える