我在Wordpress网站上有一个表单,我首先使用jQuery Validate插件验证,然后通过AJAX提交。提交时,会发送一封电子邮件,其中包含表单中包含的信息。
表单有四个字段:名称,电子邮件,网站,消息。前三个是必需的,而Message字段是可选的。如果我填写所有字段,一切正常,电子邮件将被发送。但是,如果我将“消息”字段留空,则即使“消息”是可选的,也不会发送电子邮件。
顺便说一句,我在本地工作,所以我使用Mailtrap作为SMTP服务器。
这是表单的HTML:
<form id="submit-work-cf" class="contact-form" method="post" action="submit_work" novalidate>
<input type="text" id="name" name="name" placeholder="Your full name">
<input type="email" id="email" name="email" placeholder="Your email address">
<input type="text" id="url" name="url" placeholder="Your website">
<textarea id="message" name="message" rows=7 placeholder="Additional info" value=""></textarea>
<input type="submit" value="Submit your work" />
</form>
这是我的剧本:
var form = $( '.contact-form' );
form.validate({
rules: {
name: 'required',
url: 'required',
email: {
required: true,
email: true
}
},
messages: {
name: 'Your name is required',
url: 'A link is required',
email: {
required: 'An email address is required',
email: 'Please enter a valid email address'
}
},
submitHandler: function() {
var action = form.attr( 'action' );
var params = form.serialize();
$.ajax({
url: ajax.url,
type: 'post',
data: params + "&action=" + action,
error: function ( response ) {
showNotification( 'Oops, there was an error. Please try again later', 5000 );
},
success: function ( response ) {
showNotification( 'Submission received. Thank you for contacting us!', 5000 );
}
});
}
});
这是我的AJAX回调:
add_action( 'wp_ajax_submit_work', 'submit_work' );
add_action( 'wp_ajax_nopriv_submit_work', 'submit_work' );
function submit_work() {
$name = isset( $_POST[ 'name' ] ) ? wp_strip_all_tags( $_POST[ 'name' ] ) : '';
$email = isset( $_POST[ 'email' ] ) ? wp_strip_all_tags( $_POST[ 'email' ] ) : '';
$url = isset( $_POST[ 'url' ] ) ? wp_strip_all_tags( $_POST[ 'url' ] ) : '';
$message = isset( $_POST[ 'message' ] ) ? wp_strip_all_tags( $_POST[ 'message' ] ) : '';
$site = get_bloginfo( 'name' );
$to = 'mymail@mysite.com';
$subject = 'Email by ' . $name;
$headers[] = "From: $site <$to>";
$headers[] = "Reply-To: $name <$email>";
$headers[] = 'Contenet-Type: text/html: charset=UTF-8';
wp_mail( $to, $subject, $message, $headers );
die();
}
+++更新和解决方案+++
我的问题被标记为另一个问题的副本,因此我无法发布答案;但我已经解决了我的问题,只需使用$_POST
代替!empty
检查isset
变量。