我有一个生成简单联系人表单的快捷码。表单发回同一页面,在该页面上处理、验证并通过电子邮件发送表单。尽管刷新页面会重新提交表单,但一切都很好。
我知道我需要一个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 ?>
最合适的回答,由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();
}