¿Eliminar comentarios duplicados en WordPress?

3 minutos de lectura

Alguien conoce la consulta sql o el complemento de wordpress que puede ayudarme a eliminar los comentarios duplicados.

Mientras estaba importando publicaciones, comentarios en wordpress, obtuve algunos tiempos de espera y repetí el proceso, por lo que algunos de los comentarios se publicaron dos veces.

Echando un vistazo a algunas de las imágenes del esquema de WordPress, debería poder identificar los registros que desea eliminar con una consulta como

SELECT wp_comments.*
FROM wp_comments
LEFT JOIN (
    SELECT MIN(comment_id) comment_id
    FROM wp_comments
    GROUP BY comment_post_id, comment_author, comment_content
) to_keep ON wp_comments.comment_id = to_keep.comment_id
WHERE to_keep.comment_id IS NULL

Debe ejecutar la consulta anterior y asegurarse de que está devolviendo los registros correctos (los que se eliminarán). Una vez que esté satisfecho con la consulta, simplemente cámbiela de una SELECT a un DELETE

DELETE wp_comments
FROM wp_comments
LEFT JOIN (
    SELECT MIN(comment_id) comment_id
    FROM wp_comments
    GROUP BY comment_post_id, comment_author, comment_content
) to_keep ON wp_comments.comment_id = to_keep.comment_id
WHERE to_keep.comment_id IS NULL

  • Gracias. Lo intentaré más tarde, encontré un problema mayor en este momento.

    – Mezelderz

    27 de octubre de 2013 a las 5:41

  • Esto es más o menos correcto, pero tenga en cuenta que muchos complementos (incluido EDD) almacenarán datos en el wp_comments mesa. Para evitar que se eliminen, recomiendo agregar comment_type = 'comment' hasta el final de las consultas anteriores. Esto limitará la eliminación a los comentarios verdaderos y dejará en paz a otros pseudocomentarios.

    – Andrés

    11 oct 2020 a las 23:11

  • también funciona para reseñas/comentarios de woocommerce

    – Melisa

    6 de noviembre a las 19:23

Wow, esto funcionó de maravilla, una forma más agresiva que utilicé eventualmente para eliminar todos los comentarios duplicados, independientemente del autor o la ID de la publicación, será:

DELETE wp_comments
FROM wp_comments
LEFT JOIN (
    SELECT MIN(comment_id) comment_id
    FROM wp_comments
    GROUP BY comment_content
) to_keep ON wp_comments.comment_id = to_keep.comment_id
WHERE to_keep.comment_id IS NULL

Esto eliminará comentarios cortos inútiles que funcionan como una plantilla como: “Gracias”, “Genial”…

Tuve este problema recientemente y terminé escribiendo este pequeño script para solucionarlo. Lo bueno de esto es que también te dejará con el recuento correcto de comentarios por publicación. Si solo elimina los comentarios duplicados sin cambiar esto, el conteo se desactivará.

# First select all comments
$query = "SELECT `comment_ID`, `comment_post_ID`, `comment_content` FROM ".$wpdb->comments." WHERE 1";
$comments = $wpdb->get_results($query);

# Array to hold keeper comment IDs so we dont delete them if there are doops
$keeper_comments = array();

# Now check if each comment has any matching comments from the same post
foreach ($comments as $comment) {
  $query = "SELECT `comment_ID` FROM ".$wpdb->comments." WHERE `comment_ID` != ".$comment->comment_ID." AND `comment_post_ID` = ".$comment->comment_post_ID." AND `comment_content` = '".addslashes($comment->comment_content)."'";
    $matching_comments = $wpdb->get_results($query);
    if ($wpdb->num_rows > 0) {
        foreach ($matching_comments as $matching_comment) {
            if (!in_array($matching_comment->comment_ID, $keeper_comments)) {
                $wpdb->query("DELETE FROM ".$wpdb->comments." WHERE `comment_ID` = ".$matching_comment->comment_ID);
                $wpdb->query("UPDATE ".$wpdb->posts." SET `comment_count` = `comment_count` - 1 WHERE `comment_ID` = ".$matching_comment->comment_ID);
            }
        }
        $keeper_comments[] = $comment->comment_ID;
    }
}

Probé todas las opciones anteriores. Desafortunadamente, Grimmdude no funcionó. La solución proporcionada por TI eliminó ambos comentarios si alguno estaba duplicado. Quería quedarme con uno de los duplicados. Con un poco de ayuda de un amigo, este script funcionó.

Para cualquiera que necesite la dirección, esta debería ser una consulta SQL ejecutada en la base de datos.

DELETE t1 
FROM wp_comments t1
INNER JOIN wp_comments t2 
WHERE t1.COMMENT_ID < t2.COMMENT_ID AND t1.comment_content = t2.comment_content;

¿Ha sido útil esta solución?