2

ケース: ページに、ユーザーが単純なテキスト ファイルに特定の値を追加できるフォームがあります。値が正常に追加された後、同じページにリダイレクトしたいと思います。

読み取り/書き込みコードはすべてうまく機能し、リダイレクトコードも配置しましたが、これにより警告が表示されますheader information is already sent.

私が試したヘッダー:

header("Location: some_url_here_in_same_site");
wp_redirect("some_url_here_in_same_site");

私のフォームコード:

if(isset($_POST['txtName'])}

    // form validation code here
    if(successful)
        wp_redirect("some_url_here_in_same_site");

}

問題:

  • プラグインでフォームを送信した後、ワードプレスでリダイレクトするにはどうすればよいですか?
  • ob_startうまくいかないので、これも提案しないでください
4

1 に答える 1

7

OK、フックを使ってなんとかできました。以下のコードを使用してリダイレクトを行いました。フォームアクションがに設定されていることに注意してくださいadmin-post.php

<form action="admin-post.php" name="frmHardware" id="frmHardware" method="post">
    <!-- form elements -->
    <!-- Essential field for hook -->
    <input type="hidden" name="action" value="save_hw" />
</form>

次に、プラグインのメインファイルに次を追加しました。

add_action('admin_init', 'RAGLD_dashboard_hardware_init' ); // action hook add/remove hardware

ここで、関数の定義は次のとおりです。また、予約語が上記の形式の非表示フィールドadmin_postと組み合わされている最初の引数が派生していることに注意してください。action

function RAGLD_dashboard_hardware_init() {
    // checking for form submission when new hardware is added
    add_action( 'admin_post_save_hw', 'RAGLD_process_hw_form' );
}

上記でフォームが送信されたという評価の後、フォームエントリを検証し、それに応じてアクション/リダイレクトを実行するためadd_actionの関数RAGLD_process_hw_formが呼び出されます。

function RAGLD_process_hw_form() {
    if (form_is_validated) {
        wp_redirect( add_query_arg( array('page' => 'ragld/edit-hardware', 'action'=> 'InvalidData'), admin_url() ));
    } else {
        //do something else
    }
}

これは私が当面考えられる解決策です。より効果的だと感じたら、答えを提案することができます。

于 2012-10-15T08:58:46.383 に答える