WordPress。表单验证失败后从admin-post.php获取数据

标签 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 是错误的。我找到了两个解决方案:

  1. 在 wp_redirect 中使用 get param - 它可能只适合一次输入,但效果会很糟糕,尤其是对于文件和密码输入。
  2. 使用 $_SESSION - 它好一点,但实现此方法仍然很粗糙。
  3. 使用curl - 对于 WP 来说这是非常肮脏的解决方案

我想应该有一些简单的默认方法来处理这个问题,因为这是非常重要的事情。有什么想法吗?

最佳答案

如果用户已登录,请使用 transient 并将其设置为约 60 秒过期,在 admin_post 操作中设置数据,然后在表单页面中检索它们。我仍在寻找一个不错的解决方案,该解决方案不涉及通过在表单中​​设置 action="" 而不使用 admin_post 操作将表单发布回自身。

关于WordPress。表单验证失败后从admin-post.php获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038737/

相关文章:

.htaccess - htaccess如何重定向所有页面,但不是根目录

html - WordPress Twenty Twelve 主题中页脚内的样式小部件

php - 在 PHP 循环中将 'end' 基础类添加到 div 的样式不正确

wordpress - 使用 WooCommerce 中的变体复选框以允许多项选择

forms - 如何在Joomla(2.5/3.x)中以正确的方式获取数组

javascript - 使用 javascript 拦截传入的 URL

wordpress - WooCommerce 显示自定义列

jquery:获取任何表单上的任何更改事件

javascript - 清除不活动时的表单字段

java - JSF 中 GET 参数的 UTF-8 编码