WordPress的。在不成功的表单验证后从admin-post.php获取数据

时间:2017-07-11 15:27:30

标签: wordpress forms redirect http-post submit

我将表单提交给admin-post.php:

 <form action="<?php echo admin_url('admin-post.php') ?>" method="post">
    <input type="hidden" name="action" value="some-action">
    <input type="text" name="somename">
 </form>

在后端处理它:

 add_action( 'admin_post_some-action', function () {

    $isValid = // SOME VALIDATION HERE
    if($isValid){
        wp_redirect('next-step'); //redirect to the next form
        return;
    }

    wp_redirect('current-step'); //redirect back
});

如果表单无效,我想重定向回填充数据的表单并突出显示无效输入。问题是wp_redirect根本不返回任何数据。所以用户需要再次手动填写所有数据,甚至不理解wjat是错误的。我找到了2个解决方案:

  1. 在wp_redirect中使用get param - 它可能仅适用于一个输入,但它会很糟糕,尤其是对于文件和密码输入。
  2. 使用$ _SESSION - 它有点好,但仍然是粗略的方法来实现它。
  3. 使用curl - 这是WP的非常脏的解决方案
  4. 我想应该有一些简单的默认方式来处理这个问题,因为它非常重要。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果用户已登录并将其设置为过期约60秒,则使用瞬变,在admin_post操作中设置数据,然后在表单页面中检索它们。我还在寻找一个不错的解决方案,它不会通过在表单中​​设置action=""而不使用admin_post操作将表单发回给自己。

答案 1 :(得分:-1)

是否简单&#39;或者&#39;很难&#39;编程,需要给机器指令。想想如何用纯PHP完成它。登录失败后,您基本上被重定向到另一个页面。由于HTTP是无状态的,因此您可以将数据存储在服务器端(数据库,会话,文件......)中,也可以传递URL中的信息。 WordPress不会自动启动会话,以便您存储最后一次表单提交。