在表单处理程序中重定向,导致表单提交两次

时间:2016-11-23 作者:Jeff Pedigo

我有一个前端表单,我在使用init钩子的插件中使用了一个POST处理程序。基本上是:

<form action="" method="POST" id="mktinto-form" class="profile-form">
  <!-- form fields here -->
  <input type="hidden" name="action" value="profile-form">
  <input type="submit" value="Submit">
</form>
和处理程序:

function vv_process_profile_forms() {
  if ( isset( $_POST[\'action\'] ) && $_POST[\'action\'] == \'profile-form\' ) {

    // form processing code here

    $redirect_page = get_permalink( 586 );
    wp_redirect( $redirect_page ); exit;
  }
}
add_action( \'init\',\'vv_process_profile_forms\' );
表单将被提交,页面将重定向到流程中的下一页。

表单发布良好,发生重定向,但表单处理程序实际上运行了两次。如果我删除重定向,它只运行一次,就像它应该运行的那样,但是,当然,它不会移动到下一页。所以,似乎双重张贴是重定向的结果,但我不知道为什么。

2 个回复
最合适的回答,由SO网友:Jeff Pedigo 整理而成

我想早点回答这个问题。原来问题是开发人员错误(我!)。我使用了一个javascript表单处理程序来处理数据并将其传递给php表单处理程序。原来我实际上是在加载。js文件在页面上显示两次。因为浪费了一天的大部分时间才弄明白这一点,我狠狠地踢了自己一脚。

实际上,我已经通过在javascript中解除表单提交事件的绑定来修复了它,但后来我找到了根本原因,不再需要这样做了。

SO网友:GKS

您可以通过会话修复它。尝试

function vv_process_profile_forms() {
    session_start();

    if ( isset( $_POST[\'action\'] ) && $_POST[\'action\'] == \'profile-form\' ) {

        if ( ! isset( $_SESSION[\'form-submit\'] ) ) {

            // form processing code here

            $_SESSION[\'form-submit\'] = 1;

            $redirect_page = get_permalink( 586 );
            wp_redirect( $redirect_page );
            exit;

        } else {

            unset( $_SESSION[\'form-submit\'] );
        }
    }
}
add_action( \'init\',\'vv_process_profile_forms\' );

相关推荐

Wodpress XML Import hooks

要将来自给定远程站点的帖子合并到给定类别下的一个站点中,我如何挂接导入插件以保存给定类别的帖子:给出的示例:接收方站点具有类别auto 我想从(例如)导入所有帖子auto.com 在下面this category. 如果远程帖子有另一个类别auto 添加为子级。应该下载内部帖子图片,更新帖子内的所有链接,因此我已经找到了一个核心方法,下面是我尝试的方法,但我认为这可以变得更简单<?php if (!class_exists(\'Wp_Http\')) in