如果未填写可选字段,则不会发送电子邮件

时间:2017-12-09 09:19:20

标签: php wordpress forms validation email

我在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变量。

0 个答案:

没有答案