在wordpress自定义联系表单插件中提交表单后重置表单字段

时间:2014-12-18 17:16:25

标签: php wordpress wordpress-plugin

我有自己的自定义联系表单wordpress插件,在用户提交表单后我无法重置表单字段。

当用户填写所有字段并提交时,将显示成功消息,之后我需要该表单重置所有字段。目前,它显示了用户在提交前输入的值。

非常感谢任何帮助。提前致谢。这是我的代码。

<?php
/*
Plugin Name: Custom Contact Form
Plugin URI: 
Description: <code>[contact email="your@email.address"]</code>
Version: 1.0
Author: 
Author URI: 
*/

// function to get the IP address of the user
function tw_get_the_ip() {
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        return $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
    return $_SERVER["HTTP_CLIENT_IP"];
}
else {
    return $_SERVER["REMOTE_ADDR"];
}
}

// the shortcode
function tw_contact_form_sc($atts) {
extract(shortcode_atts(array(
    "email" => get_bloginfo('admin_email'),
    "subject" => '',
    "label_name" => 'Your Name',
    "label_email" => 'Your E-mail Address',
    "label_subject" => 'Subject',
    "label_message" => 'Your Message',
    "label_submit" => 'Submit',
    "error_empty" => 'Please fill in all the required fields.',
    "error_noemail" => 'Please enter a valid e-mail address.',
    "success" => 'Thanks for your e-mail! We\'ll get back to you as soon as we can.'
), $atts));

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $error = false;
    $required_fields = array("your_name", "email", "message", "subject");

    foreach ($_POST as $field => $value) {
        if (get_magic_quotes_gpc()) {
            $value = stripslashes($value);
        }
        $form_data[$field] = strip_tags($value);
    }

    foreach ($required_fields as $required_field) {
        $value = trim($form_data[$required_field]);
        if(empty($value)) {
            $error = true;
            $result = $error_empty;
        }
    }

    if(!is_email($form_data['email'])) {
        $error = true;
        $result = $error_noemail;
    }

    if ($error == false) {
        $email_subject = "[" . get_bloginfo('name') . "] " . $form_data['subject'];
        $email_message = $form_data['message'] . "\n\nIP: " . tw_get_the_ip();
        $headers  = "From: ".$form_data['your_name']." <".$form_data['email'].">\n";
        $headers .= "Content-Type: text/plain; charset=UTF-8\n";
        $headers .= "Content-Transfer-Encoding: 8bit\n";
        wp_mail($email, $email_subject, $email_message, $headers);
        $result = $success;
        $sent = true;
    }
}

if($result != "") {
    $info = '<div class="info">'.$result.'</div>';
}
$email_form = '<form class="contact-form" method="post" action="'.get_permalink().'">
    <div>
        <label for="cf_name">'.$label_name.':</label>
        <input type="text" name="your_name" id="cf_name" size="50" maxlength="50" value="'.$form_data['your_name'].'" />
    </div>
    <div>
        <label for="cf_email">'.$label_email.':</label>
        <input type="text" name="email" id="cf_email" size="50" maxlength="50" value="'.$form_data['email'].'" />
    </div>
    <div>
        <label for="cf_subject">'.$label_subject.':</label>
        <input type="text" name="subject" id="cf_subject" size="50" maxlength="50" value="'.$subject.$form_data['subject'].'" />
    </div>
    <div>
        <label for="cf_message">'.$label_message.':</label>
        <textarea name="message" id="cf_message" cols="50" rows="15">'.$form_data['message'].'</textarea>
    </div>
    <div>
        <input type="submit" value="'.$label_submit.'" name="send" id="cf_send" />
    </div>
</form>';

if($sent == true) {
        return $info.$email_form;
} else {
        return $info.$email_form;
}
} add_shortcode('contact', 'tw_contact_form_sc');

?>

2 个答案:

答案 0 :(得分:1)

在这种情况下,您只需在$sent == true上手动分配值:

// Presumably if the email is sent, you want blank values instead
// of populated ones.
if($sent == true) {
        $form_data['your_name'] =   "";
        $form_data['email']     =   "";
        $form_data['subject']   =   "";
        $form_data['message']   =   "";
    }

$email_form = '<form class="contact-form" method="post" action="'.get_permalink().'">
    <div>
        <label for="cf_name">'.$label_name.':</label>
        <input type="text" name="your_name" id="cf_name" size="50" maxlength="50" value="'.$form_data['your_name'].'" />
    </div>
    <div>
        <label for="cf_email">'.$label_email.':</label>
        <input type="text" name="email" id="cf_email" size="50" maxlength="50" value="'.$form_data['email'].'" />
    </div>
    <div>
        <label for="cf_subject">'.$label_subject.':</label>
        <input type="text" name="subject" id="cf_subject" size="50" maxlength="50" value="'.$subject.$form_data['subject'].'" />
    </div>
    <div>
        <label for="cf_message">'.$label_message.':</label>
        <textarea name="message" id="cf_message" cols="50" rows="15">'.$form_data['message'].'</textarea>
    </div>
    <div>
        <input type="submit" value="'.$label_submit.'" name="send" id="cf_send" />
    </div>
</form>';

有很多方法可以做到这一点,但如果没有做太多修改你所拥有的东西,这可能是最快的。

答案 1 :(得分:0)

如果你使用Ajax / Json提交表单,那么在提交表单之后在ajax / json中添加一个简单的代码

$('form').reset();


你也可以为ex的所有输入字段设置一个自定义类。班级名称:清楚 然后使用

$('.class').val('');

简单的答案是:

<input type="submit" onClick="this.form.reset()" />
相关问题