<form action="<?php echo get_template_directory_uri() . "/validation.php"; ?>" id="contactForm">
因此,我将概述基本原理,这样您就有了一个可以向前推进的框架
修复管理AJAX,因此我将非常简要地介绍这一点,因为这不是我回答的关键,但会很有用:
添加一个名为action
而不是将其添加到URLvalidation.php
任何其他独立的文件都应该燃烧千个太阳,在JS中进行验证,然后在表单处理程序中再次进行验证。处理表单和验证表单是同一个步骤,其他人可以跳过验证直接进行处理。最后,使用标准表单处理程序来处理不使用/不可能使用JS的情况,检查表单中是否存在仅在提交时才会发生的内容,并通过具有空操作属性将表单提交到同一页面,例如:
if ( !empty( $_POST[\'form_page\'] ) ) {
$valid = false;
// do validation
//
if ( true === $valid ) {
// yay do whatever submitting the form is meant to do
// if it\'s a multipage form, handle that here
} else {
get_template_part( \'form\' ); // show the form again, but with warnings for validation
}
} else {
get_template_part( \'form\' );
}
RESTful表单提交将表单提交jQuery更改为使用REST端点,让我们调用
darthvader/v1/contact
, 我使用了来自
stackoverflow answer here:
jQuery(\'input#submitButton\').click( function() {
jQuery.ajax({
url: \'/wp-json/darthvader/v1/contact\',
type: \'post\',
dataType: \'json\',
data: jQuery(\'form#contactForm\').serialize(),
success: function(data) {
//... do something with the data...
}
});
});
这几乎是您需要的通过REST API提交的所有表单,但您仍然需要该端点存在,“/wp-json/darthvader/v1/form”需要创建,所以让我们告诉wp我们需要一个接受POST的端点:
add_action( \'rest_api_init\', function () {
register_rest_route( \'darthvader/v1\', \'/contact/\', array(
\'methods\' => \'POST\',
\'callback\' => \'darth_contact_form\'
) );
} );
然后定义调用时会发生什么:
function darth_contact_form( \\WP_REST_Request $request ) {
//
}
这是我们处理表格的地方,例如:
function darth_contact_form( \\WP_REST_Request $request ) {
$title = $request[\'title\'];
$message = $request[\'message\'];
// send an email or create a post, or whatever
// the contact form does when its submitted
return "Your contact request had the title ".$title;
}
返回值转换为JSON并发送回浏览器,以便您可以在前面的回答中看到的javascript中的成功函数中处理它。您还可以返回其他响应,例如:
return \\WP_REST_Response( "Bad request, X Y and Z are empty", 400);
您可以返回
WP_Error
对象来指示出错或不正确的内容:
return new WP_Error( \'awesome_no_author\', \'Invalid author\', array( \'status\' => 404 ) );
您可以在端点内进行验证,但也可以通过指定期望的字段和验证它们的函数,让端点为您进行验证,但我将此作为练习(或新问题)留给您