<?php
/*
Plugin Name: Custom Contact Form Pro
Description: Form di contatto avanzato con validation e anti-spam
Version: 1.0.0
Author: Pierluigi Covelli*/
// Previeni accesso diretto
if (!defined('ABSPATH')) {
exit;
}
class CustomContactForm {
private $plugin_path;
public function __construct() {
$this->plugin_path = plugin_dir_path(__FILE__);
add_action('wp_enqueue_scripts', [$this, 'enqueue_scripts']);
add_shortcode('custom_contact_form', [$this, 'render_form']);
add_action('wp_ajax_send_contact', [$this, 'handle_form_submit']);
add_action('wp_ajax_nopriv_send_contact', [$this, 'handle_form_submit']);
}
public function enqueue_scripts() {
wp_enqueue_style('ccf-style', plugins_url('assets/style.css', __FILE__));
wp_enqueue_script('ccf-script', plugins_url('assets/script.js', __FILE__), ['jquery'], '1.0.0', true);
wp_localize_script('ccf-script', 'ccf_ajax', [
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('ccf_nonce')
]);
}
public function render_form() {
ob_start();
?>
<form id="custom-contact-form" class="ccf-form">
<div class="ccf-field">
<label for="ccf-name">Nome *</label>
<input type="text" id="ccf-name" name="name" required>
</div>
<div class="ccf-field">
<label for="ccf-email">Email *</label>
<input type="email" id="ccf-email" name="email" required>
</div>
<div class="ccf-field">
<label for="ccf-message">Messaggio *</label>
<textarea id="ccf-message" name="message" rows="5" required></textarea>
</div>
<div class="ccf-field">
<label for="ccf-privacy">
<input type="checkbox" id="ccf-privacy" name="privacy" required>
Accetto privacy policy
</label>
</div>
<button type="submit" class="ccf-submit">Invia</button>
<div class="ccf-loading" style="display:none;">Invio in corso...</div>
<div class="ccf-message"></div>
</form>
<?php
return ob_get_clean();
}
public function handle_form_submit() {
check_ajax_referer('ccf_nonce', 'nonce');
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$message = sanitize_textarea_field($_POST['message']);
$privacy = isset($_POST['privacy']) ? 1 : 0;
// Validazione
if (!$name || !$email || !$message || !$privacy) {
wp_send_json_error('Compila tutti i campi obbligatori');
}
if (!is_email($email)) {
wp_send_json_error('Email non valida');
}
// Anti-spam check
if ($this->is_spam($name, $email, $message)) {
wp_send_json_error('Messaggio rilevato come spam');
}
// Invio email
$to = get_option('admin_email');
$subject = 'Nuovo contatto dal sito';
$body = "Nome: $name\nEmail: $email\nMessaggio:\n$message";
$headers = ['Content-Type: text/plain; charset=UTF-8'];
if (wp_mail($to, $subject, $body, $headers)) {
wp_send_json_success('Messaggio inviato con successo');
} else {
wp_send_json_error('Errore nell\'invio del messaggio');
}
}
private function is_spam($name, $email, $message) {
// Check parole spam
$spam_words = ['viagra', 'casino', 'lottery', 'winner'];
$text = strtolower($name . ' ' . $email . ' ' . $message);
foreach ($spam_words as $word) {
if (strpos($text, $word) !== false) {
return true;
}
}
// Check link multipli
$link_count = substr_count($text, 'http');
if ($link_count > 2) {
return true;
}
return false;
}
}
// Inizializzazione plugin
new CustomContactForm();
?>