Doppelte Kommentare in WordPress entfernen?

Lesezeit: 3 Minuten

Jeder kennt eine SQL-Abfrage oder ein WordPress-Plugin, das mir helfen kann, doppelte Kommentare zu entfernen.

Während ich Beiträge und Kommentare in WordPress importierte, kam es zu Zeitüberschreitungen und wiederholten Vorgängen, sodass einige Kommentare doppelt gepostet wurden.

Wenn Sie sich einige der Bilder des WordPress-Schemas ansehen, sollten Sie in der Lage sein, die Datensätze zu identifizieren, die Sie mit einer Abfrage wie löschen möchten

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

Sie sollten die obige Abfrage ausführen und sicherstellen, dass sie die richtigen Datensätze zurückgibt (diejenigen, die gelöscht werden). Wenn Sie zufrieden sind, funktioniert die Abfrage, und ändern Sie sie einfach von a SELECT zu einem 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

  • Vielen Dank. Ich werde es später versuchen, ich bin gerade auf ein größeres Problem gestoĂźen.

    – Mezelderz

    27. Oktober 2013 um 5:41 Uhr

  • Dies ist ungefähr richtig, aber beachten Sie, dass viele Plugins (einschlieĂźlich EDD) Daten in der speichern wp_comments Tisch. Um zu verhindern, dass diese entfernt werden, empfehle ich das HinzufĂĽgen comment_type = 'comment' bis zum Ende der obigen Abfragen. Dadurch wird die Löschung auf wahre Kommentare beschränkt und andere Pseudo-Kommentare in Ruhe gelassen.

    – Andreas

    11. Oktober 2020 um 23:11 Uhr

  • Es funktioniert auch fĂĽr Woocommerce-Bewertungen/Kommentare

    – Melissa

    6. November um 19:23 Uhr

Wow, das hat wie ein Zauber funktioniert, eine aggressivere Form, die ich schließlich verwendet habe, um alle doppelten Kommentare unabhängig von Autor oder Post-ID zu eliminieren, wird sein:

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

Dadurch werden nutzlose kurze Kommentare gelöscht, die wie eine Vorlage funktionieren, wie: “Danke”, “Großartig”….

Ich hatte dieses Problem kürzlich und schrieb schließlich dieses kleine Skript, um es zu handhaben. Das Schöne daran ist, dass Sie auch die korrekte Anzahl der Kommentare pro Beitrag erhalten. Wenn Sie nur die doppelten Kommentare löschen, ohne dies zu ändern, wird die Zählung deaktiviert.

# 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;
    }
}

Ich habe alle oben genannten Optionen ausprobiert. Grimmdude hat leider nicht funktioniert. Die von TI bereitgestellte Lösung löschte beide Kommentare, falls welche doppelt vorhanden waren. Ich wollte eines der Duplikate behalten. Mit ein wenig Hilfe von einem Freund hat dieses Skript den Zweck erfüllt.

Für alle, die die Richtung benötigen, sollte dies eine SQL-Abfrage sein, die auf der DB ausgeführt wird.

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;

1435060cookie-checkDoppelte Kommentare in WordPress entfernen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy