我将表单提交到 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 是错误的。我找到了两个解决方案:
- 在 wp_redirect 中使用 get param - 它可能只适合一次输入,但效果会很糟糕,尤其是对于文件和密码输入。
- 使用 $_SESSION - 它好一点,但实现此方法仍然很粗糙。
- 使用curl - 对于 WP 来说这是非常肮脏的解决方案
我想应该有一些简单的默认方法来处理这个问题,因为这是非常重要的事情。有什么想法吗?
最佳答案
如果用户已登录,请使用 transient 并将其设置为约 60 秒过期,在 admin_post 操作中设置数据,然后在表单页面中检索它们。我仍在寻找一个不错的解决方案,该解决方案不涉及通过在表单中设置 action=""
而不使用 admin_post
操作将表单发布回自身。
关于WordPress。表单验证失败后从admin-post.php获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038737/