Advertisement
sayful

WP Simple Contact form

Feb 27th, 2014
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.91 KB | None | 0 0
  1. <?php
  2. /**
  3.  * Plugin Name: Very Simple Contact Form
  4.  * Description: This is a very simple contact form. Use shortcode [contact] to display form on page. For more info please check readme file.
  5.  * Version: 1.3
  6.  * Author: Guido van der Leest
  7.  * Author URI: http://www.guidovanderleest.nl
  8.  * License: GNU General Public License v3 or later
  9.  * License URI: http://www.gnu.org/licenses/gpl-3.0.html
  10.  */
  11.  
  12.  
  13. // Enqueues plugin scripts
  14. function vscf_scripts() {  
  15. ?><style>
  16. #vscf label { display: block; margin: 10px 0; font-size: 1em;  color:#333; }
  17. #vscf_name, #vscf_email, #vscf_subject { display: block; margin: 10px 0; border:1px solid #ccc; padding: 5px; font-size: 1em; width: 70%; }
  18. #vscf_message { display: block; margin: 10px 0; border:1px solid #ccc; padding: 5px; font-size: 1em; width: 90%; }
  19. #vscf_send { padding: 5px 10px; width: 8em; border:1px solid #ccc; background: #f8f8f8; color:#333; }
  20. #vscf_send:hover { background: #f2f2f2; }
  21. #vscf input.error { border-color: #e77776; }
  22. #vscf textarea.error { border-color: #e77776; }
  23. span.error { color: #e77776; }
  24. span.hide { display:none; }
  25. .info { clear:both; font-style: italic; font-size: 1.25em; }
  26. </style><?php
  27. }
  28. add_action('wp_head', 'vscf_scripts');
  29.  
  30.  
  31. // function to get the IP address of the user
  32. function vscf_get_the_ip() {
  33.     if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
  34.         return $_SERVER["HTTP_X_FORWARDED_FOR"];
  35.     }
  36.     elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
  37.         return $_SERVER["HTTP_CLIENT_IP"];
  38.     }
  39.     else {
  40.         return $_SERVER["REMOTE_ADDR"];
  41.     }
  42. }
  43.  
  44.  
  45. // function to check inputfield
  46. function vscf_clean_input($str){
  47.     $str1 = preg_replace("/(\s){2,}/",'$1',$str);
  48.     $allowed = "/[^a-z0-9\\040\\.\\-\\_\\\\]/i";
  49.     $str1 = preg_replace($allowed,"",$str1);
  50.     return $str1;
  51. }
  52.  
  53. // the shortcode
  54. function vscf_shortcode($atts) {
  55.     extract(shortcode_atts(array(
  56.         "email"                 => get_bloginfo('admin_email'),
  57.         "subject"               => '',
  58.         "label_name"            => __('Your name', 'verysimple') ,
  59.         "label_email"           => __('Your email', 'verysimple') ,
  60.         "label_subject"         => __('Subject', 'verysimple') ,
  61.         "label_message"         => __('Message', 'verysimple') ,
  62.         "label_submit"          => __('Submit', 'verysimple') ,
  63.         "error_empty"           => __("Please fill in all the required fields", "verysimple"),
  64.         "error_form_name"       => __('Please enter at least 3 characters', 'verysimple') ,
  65.         "error_form_subject"        => __('Please enter at least 3 characters', 'verysimple') ,
  66.         "error_form_message"        => __('Please enter at least 10 characters', 'verysimple') ,
  67.         "error_email"           => __("Please enter a valid email", "verysimple"),
  68.         "success"               => __("Thanks for your message! I will contact you as soon as I can.", "verysimple"),
  69.     ), $atts));
  70.  
  71.     if (($_SERVER['REQUEST_METHOD'] == 'POST') && isset($_POST['form_send']) ) {
  72.    
  73.     // get posted data and sanitize them
  74.         $post_data = array(
  75.             'form_name'     => vscf_clean_input (sanitize_text_field($_POST['form_name'])),
  76.             'email'         => sanitize_email($_POST['email']),
  77.             'form_subject'      => vscf_clean_input (sanitize_text_field($_POST['form_subject'])),
  78.             'form_message'      => vscf_clean_input (sanitize_text_field($_POST['form_message']))
  79.         );
  80.            
  81.         $error = false;
  82.         $required_fields = array("form_name", "email", "form_subject", "form_message");
  83.        
  84.         foreach ($required_fields as $required_field) {
  85.             $value = stripslashes(trim($post_data[$required_field]));
  86.        
  87.         // displaying error message if validation failed for each input field
  88.             if(((($required_field == "form_name") || ($required_field == "form_subject")) && strlen($value)<3) ||
  89.                 (($required_field == "form_message") && strlen($value)<10) || empty($value)) {
  90.                 $error_class[$required_field] = "error";
  91.                 $error_msg[$required_field] = ${"error_".$required_field};
  92.                 $error = true;
  93.                 $result = $error_empty;
  94.             }
  95.             $form_data[$required_field] = $value;
  96.         }
  97.        
  98.  
  99.         // sending email to admin
  100.         if ($error == false) {
  101.             $email_subject = "[" . get_bloginfo('name') . "] " . $form_data['form_subject'];
  102.             $email_message = $form_data['form_message'] . "\n\nIP: " . vscf_get_the_ip();
  103.             $headers  = "From: ".$form_data['form_name']." <".$form_data['email'].">\n";
  104.             $headers .= "Content-Type: text/plain; charset=UTF-8\n";
  105.             $headers .= "Content-Transfer-Encoding: 8bit\n";
  106.             wp_mail($email, $email_subject, $email_message, $headers);
  107.             $result = $success;
  108.             $sent = true;
  109.         }
  110.     }
  111.  
  112.     // message
  113.     if($result != "") {
  114.         $info .= '<div class="info">'.$result.'</div>';
  115.     }
  116.  
  117.     // the contact form with error messages
  118.     $email_form = '<form class="vscf" id="vscf" method="post" action="">
  119.        <div>
  120.            <label for="vscf_name">'.$label_name.': <span class="error '.((isset($error_class['form_name']))?"":" hide").'" >'.$error_form_name.'</span></label>
  121.            <input type="text" name="form_name" id="vscf_name" class="'.$error_class['form_name'].'" maxlength="50" value="'.$form_data['form_name'].'" />
  122.        </div>
  123.        <div>
  124.            <label for="vscf_email">'.$label_email.': <span class="error '.((isset($error_class['email']))?"":" hide").'" >'.$error_email.'</span></label>
  125.            <input type="text" name="email" id="vscf_email" class="'.$error_class['email'].'"  maxlength="50" value="'.$form_data['email'].'" />
  126.        </div>
  127.        <div>
  128.            <label for="vscf_subject">'.$label_subject.': <span class="error '.((isset($error_class['form_subject']))?"":" hide").'" >'.$error_form_subject.'</span></label>
  129.            <input type="text" name="form_subject" id="vscf_subject" maxlength="50"  class="'.$error_class['form_subject'].'"  value="'.$subject.$form_data['form_subject'].'" />
  130.        </div>
  131.        <div>
  132.            <label for="vscf_message">'.$label_message.': <span class="error '.((isset($error_class['form_message']))?"":" hide").'" >'.$error_form_message.'</span></label>
  133.            <textarea name="form_message" id="vscf_message" rows="10" class="'.$error_class['form_message'].'" >'.$form_data['form_message'].'</textarea>
  134.            
  135.        </div>
  136.        <div>
  137.            <input type="submit" value="'.$label_submit.'" name="form_send" id="vscf_send" />
  138.        </div>
  139.    </form>';
  140.    
  141.     if($sent == true) {
  142.         return $info;
  143.     } else {
  144.         return $info.$email_form;
  145.     }
  146. }
  147. add_shortcode('contact', 'vscf_shortcode');
  148.  
  149. ?>
  150.  
  151.  
  152. //Usage as shortcode
  153. <?php [contact] ;?>
  154. //Use directly into your theme
  155. <?php echo do_shortcode('[contact]'); ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement