Google reCaptcha permite, de forma gratuita, introducir un reto en el envío de formularios de cualquier tipo, para detener así a los bots. Esta solución que propongo evita el uso de plugins, para conseguir un resultado, no solo eficaz, sino que maximice la eficiencia y no degrade el rendimiento de WordPress.
- Tiempo de implementación: 10/15 min
- Nivel de dificultad: Fácil
Paso 1: Registrar tu sitio en Google reCaptcha
- Ve a Google reCaptcha.
- Haz clic en el botón de “Admin Console” y accede con tu cuenta de Google.
- Haz clic en “+” para registrar un nuevo sitio.
- Selecciona “reCAPTCHA v2” y luego “Checkbox”.
- Introduce tu dominio en la sección de dominios.
- Acepta los términos de servicio y haz clic en el botón de “Enviar”.
- Se te proporcionará una Clave del sitio y una Clave secreta. Guárdalas; las necesitarás más adelante.
Paso 2: Agregar reCaptcha a tu formulario
Inserta el siguiente código justo antes del botón de enviar (o donde prefieras que aparezca el reCaptcha) en tu formulario:
<div class="g-recaptcha" data-sitekey="TU_CLAVE_DEL_SITIO"></div>
Reemplaza TU_CLAVE_DEL_SITIO
con la Clave del sitio que obtuviste en el paso anterior.
Además, necesitas agregar este script justo antes del cierre de tu etiqueta </head>
:
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
Paso 3: Verificar reCaptcha en el lado del servidor
Antes de procesar los datos del formulario en el servidor, debes verificar que reCaptcha fue completado correctamente.
- Identificar el punto de procesamiento del formulario: Primero, identifica dónde se procesa tu formulario en WordPress. Este lugar es típicamente en el
functions.php
de tu tema, especialmente si has creado un formulario personalizado. - Inserta el código de verificación: Una vez que hayas localizado el lugar en el que tu formulario es procesado, inserta el siguiente código para verificar el reCaptcha:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$recaptcha_secret = 'TU_CLAVE_SECRETA';
$response = $_POST['g-recaptcha-response'];
$verify = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$recaptcha_secret&response=$response");
$captcha_success = json_decode($verify);
if ($captcha_success->success == false) {
// Aquí puedes manejar el error como desees. Por ejemplo:
wp_die('Error en reCaptcha: ¡Eres un bot!');
Ten en cuenta que wp_die()
es una función de WordPress que detiene la ejecución y muestra un mensaje. En un entorno real, querrás manejar este error de una manera más amigable para el usuario, quizás redirigiéndolo a una página de error o mostrando un mensaje en el mismo formulario.
Antes de modificar cualquier archivo en tu tema, asegúrate de que estés usando un tema hijo. De esta manera, tus cambios no se perderán cuando actualices tu tema principal.