Borrar de forma automática los comentarios marcados como spam en WordPress

El otro día llegué a un cliente y chequeando su web, me di cuenta que tenía decenas de comentarios marcados como spam. Tenía un plugin para filtrar el spam que llegaba al blog en forma de comentarios y funcionaba bien, pero claro, los comentarios se quedaban ahí, bien clasificados pero ocupando sitio.

¿Qué problema tiene dejar decenas de miles de comentarios en la base de datos? En algún sitio he llegado a ver cientos de miles. Pues aunque no afecta mucho al desempeño de la web en muchas cosas, porque no es una tabla tan accedida como puedan ser la tabla de opciones o las tablas post/postmeta, sí que tiene ciertos problemas:

  • Afecta a la velocidad de la web en las vistas que tiran de comentarios: blog, en la página de los productos de WooCommerce que tienen valoraciones y en general en el back en muchas partes porque los comentarios aparecen hasta en un widget de la entrada
  • Hacen enorme las copias de seguridad, eso es un problema porque se alarga mucho la creación de las copias y su posterior recuperación si es necesario
  • La web ocupa más sitio, realmente su base de datos, pero en alojamientos con poco espacio es un problema

Así que bueno, estuve viendo diferentes opciones pero al final me decanté por un pequeño código a medida que borrara todos los comentarios marcados como spam. Hay plugins que lo hacen pero montar un plugin para una labor tan pequeña no tiene sentido.

Y es que como siempre digo:

  • Para acciones concretas, usando los métodos correctos de la API y donde no hay hueco para la mejora, mejor usar códigos a medida sencillos
  • Para todo lo demás, mejor usar plugins, para aprovecharte no solo del know-how del que lo hace si no de las actualizaciones y mejoras, como por ejemplo un plugin de pasarela de pago para WooCommerce

Código para borrar comentarios spam automáticamente

Os dejo el código y ahora comentamos:

add_action( 'wp_scheduled_delete', function() {
    global $wpdb;
    $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_approved = 'spam'");
} );

Empezamos por lo primero. Si os fijáis hago uso del hook wp_scheduled_delete. Este hook está asociado a un evento que el core ejecuta una vez al día. Es el hook que usa WordPress para eliminar cosas que llevan mucho tiempo en la papelera. Nosotros no unimos a él porque es buena la frecuencia, una vez al día; y porque su acción está relacionada con lo que queremos conseguir.

A esa acción asociamos la ejecución de un pequeño código SQL, que básicamente borra todos los comentarios que estén calificados como spam.

Y es que esa columna comment_approved antes era booleana pero con el tiempo ha ido cogiendo más posibles significados y ahora fijaros todo lo que puede contener:

En la base de datos de WordPress, la columna comment_approved en la tabla wp_comments puede tener los siguientes valores:

  • 0 → Comentario pendiente de moderación (aún no aprobado).
  • 1 → Comentario aprobado y visible en la web.
  • spam → Comentario marcado como spam.
  • trash → Comentario enviado a la papelera.
  • post-trash → Comentario asociado a una publicación que ha sido eliminada.

Así que nada espero haberos ayudado a resolver este pequeño gran problema que algunos tienen por culpa de todo el spam que llega en Internet.

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

0

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito