如何在联系人表单上实现POST/REDIRECT/GET模式

时间:2016-05-05 作者:mistertaylor

我有一个生成简单联系人表单的快捷码。表单发回同一页面,在该页面上处理、验证并通过电子邮件发送表单。尽管刷新页面会重新提交表单,但一切都很好。

我知道我需要一个post/redirect/get模式来防止这种情况,但我不知道如何用Wordpress实现这一点-action 是有人能举个简单的例子吗?

$errors = [];
if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
    //check and validate POST variables
    ...
    // add errors to $errors array
    ...
    // check if form considered spam    
    if(empty($errors) && !$spam) {
        $sent = wp_mail($to, $subject, $message, $headers);
        if($sent) {
            $success = true; 
            $_POST = array();
        }
    } // end if no errors
    echo "<pre>".print_r($_POST, true)."</pre>";
} //end if POST

//loop through errors (if any) and display accordingly
...
// display success message if $success
...

<?php if( !$sent) { //hide form if successfully sent ?>
    <form  id="contact_form" action="" method="post">
        <!-- form inputs -->
    </form>
<?php } //end if not sent ?>

1 个回复
最合适的回答,由SO网友:Milo 整理而成

您可以使用admin_post URL and actions 处理表单输入,然后重定向回页面。

表格:

<form action="<?php echo admin_url(\'admin-post.php\'); ?>" method="post">
  <input type="hidden" name="action" value="do_something">
  <input type="hidden" name="origin" value="<?php the_ID(); ?>">
  <input type="submit" value="Submit">
</form>
然后操作:

add_action( \'admin_post_do_something\', \'wpd_do_something\' );
add_action( \'admin_post_nopriv_do_something\', \'wpd_do_something\' );

function wpd_do_something() {
    // do something, then...
    wp_redirect( get_permalink( $_REQUEST[\'origin\'] ) );
    exit();
}

相关推荐

使用WPForms提交表单时触发操作

我的一位客户使用WPForms插件创建前端表单。提交表单时,条目进入de数据库(在单独的表wp\\u wpform\\u entries或类似的表中,全部由插件处理)。但他们也希望以JSON格式将所有数据发布到另一个网站。是否有办法知道表单已提交,或者使用add_filter(\'wp_insert_post)?