Üks asi, millest ma ei saa aru, on see, et WordPress ei sisalda veel vaikimisi lihtsat, kuid täielikku kontaktvormi.
Kuna ma teen regulaarselt WordPressi optimeerimistööd , nii siin kui ka kolmandate osapoolte saitidel, siis asendan sageli tarbetult paisunud pistikprogrammid valikud, plokid ja kaunistused, mida kunagi ei kasutata või mida ei ole vaja koodiga, et koormust kergendada.
See kontaktvorm on täielik ja kohandatav lahendus WordPressi jaoks, mis on loodud turvaliseks, lihtsasti kasutatavaks ja kasutajate privaatsust austavaks. Lisaks saate lisada või eemaldada valikuid, kui soovite. See on vorm, mida ma siin kasutan .
Need on selle peamised funktsioonid ja omadused ning juhised selle lisamiseks oma blogi mis tahes lehele või postitusele lühikoodi abil.
Struktuur ja valikud 1. Vormiväljad Nimi : kohustuslik väli, kuhu kasutaja peab sisestama oma nime.E-posti aadress : Kohustuslik väli, kuhu kasutaja peab sisestama oma e-posti aadressi.Sõnum : kohustuslik väli, kuhu kasutaja saab kirjutada oma sõnumi. See peab olema vähemalt 15 tähemärki pikk.Summa captcha : Lihtne captcha, mis palub kasutajal lahendada kahe juhusliku arvu summa vahemikus 1-9.Privaatsuspoliitikaga nõustumine : kohustuslik märkeruut, et nõustuda privaatsuspoliitikaga enne vormi esitamist.Valideerimine ja turvalisus Kohustuslike väljade valideerimine : Kõik väljad on kohustuslikud. Kui mõni neist puudub, kuvatakse veateade.Lingi valideerimine : Nime- või sõnumiväljadel ei ole lubatud lingid (URL).Additsioon Captcha : takistab automaatset rämpsposti, nõudes kasutajalt lihtsa matemaatilise operatsiooni lahendamist.Google reCAPTCHA (valikuline) : Kui Google reCAPTCHA võtmed on konfigureeritud, lisatakse teine turvalisuse tase, et vältida robotite kasutamist. Kui reCAPTCHA võtmeid ei ole lisatud, ei lisata koodi vormile.Keelatud sõnade valideerimine : Valikuliselt saab sõnumis blokeerida teatud sõnad, nt: ananass, pitsa, bitcoin (eraldatakse komaga ja ilma tühikuta).Nonce-turvalisus : kaitseb CSRF (Cross-Site Request Forgery) rünnakute eest.3. Privaatsus Andmete salvestamine puudub : kasutaja andmeid ei salvestata (ei e-kirju, ei IP-koode, ei viitavaid URL-koode, mitte midagi). See lähenemisviis on kooskõlas eraelu puutumatuse eeskirjadega, nagu GDPR, kuna isikuandmeid ei koguta ega salvestata.Privaatsuspoliitika : sisaldab linki privaatsuspoliitikale, mida kasutaja peab enne vormi esitamist lugema ja aktsepteerima.4. Tagasiside sõnumid Veateated : Kuvatakse plokis vormi ülaosas, kui valideerimisel esineb vigu.Edukateade : Pärast vormi edukat esitamist kuvatakse rohelise, 14px suuruse ja rasvases kirjas eduteade:"Aitäh! Teie sõnum on saadetud ". Seda teksti ja selle vormingut saab koodis muuta. Ülejäänud stiilid, nagu kollane taust, vormi sisaldava kasti raam ja vari, mida siin näha on , ning muud välised elemendid ei ole koodis, kuna need on lisatud konteineriga GenerateBlocks .5. Isikupärastamine Captcha tekst : Kohandatav (vaikimisi: "Kas oled inimene? Lahenda see summa:").Keelatud sõnad : Võib lisada komadega eraldatud keelatud sõnade loetelu.Google reCAPTCHA : Valikuline, lisatakse ainult siis, kui seadistate ja lisate oma captcha saidi ja salajase võtme koodi.6. Tulemused Kood kontrollib, kas lühikood on olemas ja kui seda ei ole, siis ei kuvata midagi, nii et see töötab ainult sellel lehel või postitusel, kuhu lühikood on lisatud.
Tulemus, kus see on näidatud, on optimaalne.
Paigaldamise ja seadistamise juhised 1. Kopeeri ja lisa kood Avage oma WordPressi teema fail functions.php (või looge kohandatud plugin, kui te ei soovi teemat muuta ega kasutada Code Snippets 'i). Kopeeri ja kleebi kogu vormikood oma functions.php faili. 2. Seadista Google reCAPTCHA (valikuline) Mine Google reCAPTCHA-sse . Valige reCAPTCHA v2 ja valige ruut "Ma ei ole robot" . Registreeri oma veebileht ja saada võtmed:Polylang placeholder do not modify Asendage vormikoodis 'YOUR_SITE_KEY'
ja 'YOUR_SECRET_KEY
' saadud võtmetega.Polylangi paigutuskirju ei muudeta. 3. Määrake keelatud sõnad (valikuline) 1 - Leia vormi koodist rida:
$palabras_prohibidas = ' ';
2 - Lisage sõnad, mida soovite blokeerida, eraldatuna komadega. Näiteks:
$palabras_prohibidas = 'caca,culo,pedo,pis';
Kui te ei soovi ühtegi sõna blokeerida, jätke muutuja tühjaks.
4. Kohandage summa captcha tekst (valikuline) Otsige vormi koodist seda rida:
<label for="captcha">¿Eres humano? Resuelve esta suma: <strong><?php echo $num1; ?> + <?php echo $num2; ?> = </strong></label>
Muuda teksti "Kas sa oled inimene? Lahenda see summa:" sellega, mida soovid näidata.
5. Lisage oma privaatsuspoliitika URL aadress Asendage selles reas näite url oma saidi privaatsuspoliitika URL-iga:
$politica_privacidad_url = 'https://tuweb.com/declaracion-de-privacidad/';
6. Lühikood Lisage lühikood lehele või postitusele, kus soovite vormi kuvada.
[formulario_contacto]
Lõpuks peate lihtsalt testima, et kontrollida, kas e-kirjad saadetakse ja jõuavad kohale, ning jälgima kasutamist, et takistada halastamatuid spämmijaid, kes ei saaks matemaatilist captchat raskendada ja/või aktiveerida mõlemat captchat korraga. Koodi saab alati parandada ja seda saab siluda ja optimeerida. Samuti saab seda tõlkida, kui on vaja kasutada seda mõnes teises keeles.
Kui ma teen muudatusi või parandusi koodis sõltuvalt tulemusest, lisan märkmed siia.
Kood //Crea un shortcode que genera un formulario de contacto para añadir en cualquier página o post de tu blog. Código actualizado en https://jrmora.com/formulario-contacto-wordpress-sin-plugin/
// Shortcode para mostrar el formulario de contacto
function contacto_form_shortcode() {
// Verificar si el shortcode está presente en el contenido actual
if (!has_shortcode(get_the_content(), 'formulario_contacto')) {
return ''; // Si no está el shortcode, no mostrar nada
}
ob_start(); // Iniciar el buffer de salida
// Claves de Google reCAPTCHA (cambia estas por las tuyas)
$site_key = 'TU_CLAVE_DEL_SITIO'; // Clave del sitio de reCAPTCHA
$secret_key = 'TU_CLAVE_SECRETA'; // Clave secreta de reCAPTCHA
// Verificar si las claves son las predeterminadas
$recaptcha_enabled = ($site_key !== 'TU_CLAVE_DEL_SITIO' && $secret_key !== 'TU_CLAVE_SECRETA');
// Lista de palabras prohibidas (separadas por comas)
// Ejemplo: $palabras_prohibidas = 'spam,publicidad,oferta';
$palabras_prohibidas = ''; // No hay palabras prohibidas por defecto
// Convertir la lista de palabras prohibidas en un array
$palabras_prohibidas_array = !empty($palabras_prohibidas) ? explode(',', $palabras_prohibidas) : [];
// Variables para almacenar errores
$errors = [];
// Verificar si el formulario ha sido enviado
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['contacto_nonce'])) {
// Verificar el nonce para seguridad
if (!wp_verify_nonce($_POST['contacto_nonce'], 'contacto_form_nonce')) {
$errors[] = 'Error de seguridad. Inténtalo de nuevo.';
} else {
// Validar el captcha de suma
$captcha = sanitize_text_field($_POST['captcha']);
$captcha_correct = sanitize_text_field($_POST['captcha_correct']);
if ($captcha !== $captcha_correct) {
$errors[] = 'El resultado de la operación es incorrecto. Inténtalo de nuevo.';
} else {
// Validar la aceptación de la política de privacidad
if (!isset($_POST['aceptar_privacidad'])) {
$errors[] = 'Debes aceptar la política de privacidad para enviar el formulario.';
} else {
// Validar Google reCAPTCHA (solo si está habilitado)
if ($recaptcha_enabled) {
if (isset($_POST['g-recaptcha-response'])) {
$recaptcha_response = sanitize_text_field($_POST['g-recaptcha-response']);
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_data = [
'secret' => $secret_key,
'response' => $recaptcha_response,
];
$recaptcha_options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query($recaptcha_data),
],
];
$recaptcha_context = stream_context_create($recaptcha_options);
$recaptcha_result = file_get_contents($recaptcha_url, false, $recaptcha_context);
$recaptcha_json = json_decode($recaptcha_result);
if (!$recaptcha_json->success) {
$errors[] = 'Por favor, verifica que no eres un robot.';
}
} else {
$errors[] = 'Por favor, completa el reCAPTCHA.';
}
}
// Si no hay errores, procesar el formulario
if (empty($errors)) {
$nombre = sanitize_text_field($_POST['nombre']);
$email = sanitize_email($_POST['email']);
$mensaje = sanitize_textarea_field($_POST['mensaje']);
// Validar campos obligatorios
if (empty($nombre)) {
$errors[] = 'El campo nombre es obligatorio.';
}
if (empty($email)) {
$errors[] = 'El campo email es obligatorio.';
}
if (empty($mensaje)) {
$errors[] = 'El campo mensaje es obligatorio.';
}
// Validar que no se hayan añadido enlaces en los campos
if (preg_match('/http|www|\[url|\[link|href=/i', $nombre . $mensaje)) {
$errors[] = 'No se permiten enlaces en los campos del formulario.';
}
// Validar que el mensaje tenga al menos 15 caracteres
if (strlen($mensaje) < 15) {
$errors[] = 'El mensaje debe tener al menos 15 caracteres.';
}
// Validar palabras prohibidas (solo si hay palabras en la lista)
if (!empty($palabras_prohibidas_array)) {
foreach ($palabras_prohibidas_array as $palabra) {
if (stripos($mensaje, $palabra) !== false) {
$errors[] = 'El mensaje contiene palabras no permitidas.';
break; // Detener la validación al encontrar una palabra prohibida
}
}
}
// Si no hay errores, enviar el correo
if (empty($errors)) {
$to = get_option('admin_email'); // Correo del administrador
$subject = 'Nuevo mensaje de contacto desde el sitio web';
$headers = array('Content-Type: text/html; charset=UTF-8', 'From: ' . $nombre . ' <' . $email . '>');
$body = "<p><strong>Nombre:</strong> $nombre</p>";
$body .= "<p><strong>Email:</strong> $email</p>";
$body .= "<p><strong>Mensaje:</strong> $mensaje</p>";
if (wp_mail($to, $subject, $body, $headers)) {
// Redirigir para evitar reenvío al refrescar la página
wp_redirect(add_query_arg('contacto', 'success', wp_get_referer()));
exit;
} else {
$errors[] = 'Hubo un error al enviar el mensaje. Inténtalo de nuevo.';
}
}
}
}
}
}
}
// Mostrar mensaje de éxito después de la redirección
if (isset($_GET['contacto']) && $_GET['contacto'] === 'success') {
echo '<p style="font-size: 14px; font-weight: bold; color: green;">¡Gracias! Tu mensaje ha sido enviado.</p>';
}
// Generar un captcha de suma de dos números aleatorios entre 1 y 9
$num1 = rand(1, 9); // Primer número aleatorio entre 1 y 9
$num2 = rand(1, 9); // Segundo número aleatorio entre 1 y 9
$captcha_result = $num1 + $num2; // Resultado de la suma
// URL de la política de privacidad
$politica_privacidad_url = 'https://tuweb.com/declaracion-de-privacidad/';
// Mostrar el formulario
?>
<?php if (!empty($errors)) : ?>
<div style="color: red; margin-bottom: 20px;">
<?php foreach ($errors as $error) : ?>
<p><?php echo esc_html($error); ?></p>
<?php endforeach; ?>
</div>
<?php endif; ?>
<form action="" method="post">
<p>
<label for="nombre">Nombre:</label><br>
<input type="text" name="nombre" id="nombre" value="<?php echo isset($nombre) ? esc_attr($nombre) : ''; ?>" required>
</p>
<p>
<label for="email">Email:</label><br>
<input type="email" name="email" id="email" value="<?php echo isset($email) ? esc_attr($email) : ''; ?>" required>
</p>
<p>
<label for="mensaje">Mensaje:</label><br>
<textarea name="mensaje" id="mensaje" rows="5" required><?php echo isset($mensaje) ? esc_textarea($mensaje) : ''; ?></textarea>
</p>
<p>
<label for="captcha">¿Eres humano? Resuelve esta suma: <strong><?php echo $num1; ?> + <?php echo $num2; ?> = </strong></label><br>
<input type="text" name="captcha" id="captcha" required>
<input type="hidden" name="captcha_correct" value="<?php echo $captcha_result; ?>">
</p>
<?php if ($recaptcha_enabled) : ?>
<p>
<div class="g-recaptcha" data-sitekey="<?php echo esc_attr($site_key); ?>"></div>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</p>
<?php endif; ?>
<p>
<input type="checkbox" name="aceptar_privacidad" id="aceptar_privacidad" required>
<label for="aceptar_privacidad">He leído y acepto la <a href="<?php echo esc_url($politica_privacidad_url); ?>" target="_blank">política de privacidad</a>.</label>
</p>
<p>
<?php wp_nonce_field('contacto_form_nonce', 'contacto_nonce'); ?>
<input type="submit" value="Enviar">
</p>
</form>
<?php
return ob_get_clean(); // Devolver el contenido del buffer
}
add_shortcode('formulario_contacto', 'contacto_form_shortcode');