Nada en WordPress es inmutable, todo se puede cambiar para adaptarlo a las necesidades de nuestra web, de nuestro proyecto. Aunque, claro, no puede haber opciones para todo o WordPress se convertiría en un monstruo inmanejable.
Esto viene a cuento de la necesidad que le surgió a un cliente hace poco de modificar el formulario de comentarios, en este caso para adaptarlo a la ley de protección de datos española. Y, por supuesto, se puede.
Tabla de contenidos
El RGPD (Reglamento General de Protección de Datos) y los comentarios
El Reglamento Europeo de Protección de Datos establece que en cualquier lugar en que se soliciten datos de carácter personal, el usuario debe ser informado de las políticas de privacidad y, además, debe aceptarlas expresamente.
Esto lo digo por los de fuera, claro, porque los de aquí ya la conocemos de sobra. Pero eso no significa que se aplique a rajatabla. Y el caso más típico es el del formulario de comentarios.
Porque, no nos engañemos, en el formulario de comentarios de WordPress se piden datos de carácter personal: como mínimo el nombre y la dirección de correo electrónico, de forma obligatoria. Entonces, ¿no debería cumplirse la lay de protección de datos en ese formulario?
La respuesta es que sí, pero que nadie lo hace. De hecho, hasta que encontré el caso de este cliente que me lo pidió, nunca antes me habían pedido ni había visto en ninguna web la aplicación de esta normativa en el formulario de los comentarios.
Pero, en fin, la obligación existe.
A continuación encontrarás toda la información técnica necesaria para que puedas modificar el formulario de comentarios de WordPress por ti mismo, en función de tus necesidades. Pero si el código no es lo tuyo, al final del artículo te propongo un plugin para que puedas hacerlo fácilmente.
Modificar el formulario de comentarios de WordPress
No es ése el único caso en que pueda necesitarse algo así. Cumplir el RGPD exige añadir una casilla de verificación obligatoria, pero puede haber casos en los que queramos añadir cualquier otro campo (o incluso simplemente un texto informativo), en función de las necesidades de nuestro proyecto.
El formulario de comentarios, ya lo conoces, es este de aquí. Existen, para modificarlo, tres aproximaciones. La primera, mala, ineficiente, amateur y además totalmente inútil, es modificar el archivo de WordPress que crea dicho formulario, y que está en wp-includes/comment-template.php.
No sólo no debes hacerlo por seguridad sino que además, como decía más arriba, es totalmente inútil, ya que la siguiente actualización de WordPress hará que pierdas cualquier cambio que hayas hecho.
La segunda opción es editar los archivos de tu plantilla (sólo si usas un tema hijo, si no también perderás cualquier cambio cuando ésta se actualice) y sustituir las apariciones de comment_form() por una versión modificada de la función con ciertos argumentos que puede aceptar.
Este sistema es también poco recomendable: es engorroso, impedirá que se actualicen ciertos archivos de la plantilla (todos aquellos que crees en tu tema hijo para poder hacer los cambios) y, además, lo perderás todo el día que decidas cambiar de plantilla; día que antes o después, créeme, llegará.
Y luego está la tercera opción, la buena, la pro: modificar el formulario de comentarios de WordPress comme il faut.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
La forma correcta de personalizar el formulario de comentarios de WordPress
Hooks, la palabra mágica y maravillosa de WordPress, que te permite hacer sobre él cualquier cosa que necesites sin despeinarte. En efecto, vamos a hacer uso de algunos hooks (tanto filtros como acciones) de que dispone el formulario de comentarios.
De hecho, echando un vistazo a wp-includes/comment-form.php puedes ver los que tenemos disponibles. Y son muchos: comment_author, get_comment_author_email, comment_email, get_comment_author_link… Muchos de verdad, no los voy a mencionar todos, ya dije dónde puedes verlos.
Pero sí hay algunos que por muy útiles e interesantes voy a explicar:
- El filtro comment_form_field_{$name}, donde {$name} se puede sustituir por el nombre de cualquiera de los campos (author, email, url, comment) para filtrar dicho campo
- El filtro comment_form_submit_button, que permite filtrar el botón de envío
- La acción comment_form, que se dispara al final del formulario
- La acción comment_form_after, que se dispara después del formulario
Lo cierto es que jugando con estos hooks (y quizá con algún otro de los disponibles en ese archivo) podemos hacer cualquier cosa con el formulario de comentarios. Para aquellos a los que todo esto le suena a chino, vamos a ver cosas concretas, terminadas y masticadas.
Eliminar el campo Web del formulario de comentarios
Este puede ser un buen ejemplo porque es algo que mucha gente quiere hacer, ya que la presencia de este campo es un imán de spam, no ya el automatizado sino ese otro spam manual, de usuarios que generan comentarios superfluos y forzados sólo para dejar su enlace.
Eliminarlo para siempre del formulario sería tan sencillo como hacer:
add_filter ('comment_form_field_url', function ($url) {
return;
});
Es decir, recibimos el campo URL para filtrarlo y devolvemos… nada. Así no hay campo que valga, y muerto el perro se acabó la rabia (bendito refranero). Si no sabes qué hacer con ese código, puedes echarle un vistazo a este artículo:
Cumplir la ley de protección de datos en los comentarios
El otro ejemplo evidente es, por supuesto, añadir campos al formulario. Y nada mejor para hacerlo que el caso que explicaba al principio: la necesidad de cumplir la LOPD en los comentarios. Esto incluye cuatro acciones a tener en cuenta:
- Tenemos que incluir una casilla de aceptación, obligatoria
- Tenemos que informar al usuario de la política de privacidad
- Tenemos que validar la casilla, para que el usuario no pueda enviar el comentario si ésta no está marcada
- Tenemos que guardar el valor de esa casilla en la base de datos, de forma que ante una auditoría podamos demostrar que todos los usuarios que dejaron un comentario marcaron la casilla, aceptando dicha política
En principio, como vamos a ir viendo a continuación, parece bastante más complicado de lo que en realidad es.
Añadir la casilla de aceptación al formulario de comentarios de WordPress
Aquí en principio se nos presenta un problema: las acciones que tenemos disponibles (comment_form y comment_form_after) se disparan después del botón de envío. Podría servir, claro está, pero tratándose de una aceptación lo correcto es que esté antes del botón para enviar el comentario.
No es una dificultad tan insalvable, después de todo: basta con añadir el campo después del campo inmediatamente anterior a este botón. Qué campo sea éste depende de la versión de WordPress que estés utilizando y de tu plantilla. La tendencia actual es poner primero el campo para el comentario, pero hasta hace bien poco este campo era el que estaba el último.
Por tanto, basta con utilizar el filtro comment_form_field_comment (si es el campo del comentario el que tienes el último en el formulario), capturar el campo en una variable y, antes de devolverlo, añadirle el HTML necesario para crear la casilla de aceptación.
Informar al usuario
Esta parte es trivial. En este caso podemos utilizar el paso anterior para añadir, después de la casilla de verificación, el texto Acepto la política de privacidad con un enlace a la página que explica dicha política.
Si se quiere añadir un texto algo más extenso, se puede hacer ya al final del formulario, utilizando las acciones comment_form o comment_form_after.
Guardar el valor de la casilla en la base de datos
Este punto es crucial, ya que sin él no vale nada de lo que hagamos: si no podemos demostrar la aceptación del usuario, no estamos cumpliendo con los requisitos de la ley. Así que hay que almacenar en la base de datos el valor de esta casilla.
Esto se sale fuera del objetivo de este artículo, ya que no se trata de actuar sobre el formulario de comentarios sino sobre la base de datos, pero para no dejarte con la información a medias te diré que puedes utilizar el hook comment_post (que se dispara al publicar un comentario) para capturar el ID del comentario e insertar el valor de la casilla en la base de datos (concretamente en la tabla comments_meta) usando la función add_comment_meta(). Sencillo.
Validar la casilla
Evidentemente, todo esto es inútil si la casilla no se valida, y el usuario puede publicar el comentario tanto si la marca como si no, así que éste es otro paso fundamental.
Para ello puedes usar el hook preprocess_comment, que se filtra al pulsar el botón de envío del comentario, pero antes de hacer ninguna otra cosa con él. Ahí es donde puedes añadir un wp_die que impida que el formulario se envíe si la casilla no está marcada. Suponiendo que rgpd es el nombre de la checkbox:
add_filter ('preprocess_comment', function ($comentario) {
isset ($_POST['rgpd']) or wp_die ('Por favor, acepta nuestra política de privacidad para continuar.');
return $comentario;
});
Sin embargo sucede que un wp_die no sólo es lo más feo del mundo en cuanto a validación de formularios, sino que además va en contra de la usabilidad, ya que el usuario tendría que volver atrás al encontrarse con algo así:
Eso es todo: ni menú, ni enlaces, ni nada de nada. Sólo queda dar hacia atrás al navegador. Así que lo correcto es añadir una validación adicional con JavaScript, de forma que avise al usuario (un simple alert() es suficiente) de que debe marcar la casilla para comentar antes de procesar el formulario.
Plugin para adaptar el formulario de comentarios al RGPD
Si la mayor parte de lo dicho hasta ahora te suena a élfico, el código te provoca urticaria, o te da pereza empezar a configurar todo eso, tienes suerte: la otra gran ventaja de WordPress (aparte de las infinitas posibilidades de adaptación) consiste en sus plugins. Y yo he preparado uno con todo esto.
Este plugin te permite hacer todo lo visto hasta ahora, y más:
- Añadir una casilla de verificación al formulario de comentarios de WordPress (también a las valoraciones de WooCommerce, si tienes tienda), en la posición que elijas, con el texto de aceptación que quieras
- Validación y comprobación de que la casilla de aceptación, obligatoria para poder comentar, está marcada
- Almacenamiento del valor de la casilla en la base de datos, asociado al comentario correspondiente
- Posibilidad de incluir el texto básico de protección de datos antes o después del formulario
Como ves es completamente personalizable, y te lo da ya todo mascadito, para que sólo tengas que activar y seleccionar tus preferencias. Y, por supuesto, la notificación si no marcas la casilla no está implementada con wp_die. Lo puedes encontrar aquí:
Y, como siempre, recuerda que si tu proyecto tiene necesidades específicas y requieres un desarrollo a medida, no tienes más que contactar conmigo
Ruben González dice
Hola buenas tardes mi estimado desde hace un tiempo te vengo siguiendo los pasos y la verdad me gusta tu pedagogia y tu forma de transmitir el conocimiento….Te quería pedir el favor ver si es posible que expliques a detalle con peras y manzanas la forma de Modificar el formulario de comentarios de WordPress sin el plugin paso a paso si es posible hacer un videotutorial.
Espero puedas dar una respuesta favorable
Quedo a la espera de tus comentarios… muchas gracias
Enrique J. Ros dice
Hola Rubén
Eso ya lo tienes en la documentación de desarrollo de WordPress (Codex), aquí
Un saludo
Gabriel dice
Hola!! Te consulto algo, he buscado pero aún no encontré la solución, es para agregar un campo al formulario. Por ejemplo, en el sitio que estpy administrando, no es necesario la Web (que no es obligatorio) pero si de donde es el usuario, por la ciudad o pais, que el usuario escriba. Si se usa el de WEB para escribir la ciudad, WP le agrega el http…
Enrique J. Ros dice
Hola Gabriel
No conozco ningún plugin que lo haga, habría que hacerlo por código.
Un saludo
asda dice
dasd
Ronald dice
Muy interesante