Categories
WordPress

Eliminare i commenti “orfani” su WordPress

Un errore nel database di WordPress non consente di gestire correttamente i commenti. Per fortuna esiste una soluzione.

Loading spinner

Oggi mi è capitato di dover risolvere un problema su un blog basato su WordPress: l’amministratore non riusciva a cancellare alcuni vecchi commenti ad articoli che non esistevano più.

In verità WordPress gestisce molto bene i suoi contenuti, ma il blog in questione ha una lunga storia alle spalle, è stato spesso spostato da un server all’altro e continuamente esportato e re-importato, così alla fine si è verificato questo piccolo inconveniente: molti commenti facevano riferimento ad articoli che non esistevano più.

Lo stesso problema può capitare

  • a chi installa plug-in che fanno “pulizia” dei vecchi contenuti
  • a seguito di un malfunzionamento del server
  • come conseguenza di un attacco.

Insomma, se cancellate un articolo direttamente dal database, vi sarà poi impossibile gestire i commenti ad esso associati utilizzando gli strumenti di WordPress, ma per fortuna esiste una facile soluzione.

Come faccio a capire se ho questo problema?

Se ci sono dei commenti che non riuscite a cancellare, o se visualizzate uno dei seguenti errori, è il caso di fare questa verifica. Se la vostra installazione di WordPress presenta questa anomalia dovreste rilevare alcuni messaggi di errore nella pagina di gestione dei commenti, i messaggi di errore somiglieranno a questi:

Notice: Trying to get property of non-object in 

    .../wp-includes/capabilities.php on line 1069
    .../wp-includes/capabilities.php on line 1073
    .../wp-includes/capabilities.php on line 1075
    .../wp-includes/capabilities.php on line 1076
    .../wp-includes/capabilities.php on line 1079
    .../wp-includes/capabilities.php on line 1178
    .../wp-includes/capabilities.php on line 1180

    .../wp-admin/includes/class-wp-comments-list-table.php on line 488
    .../wp-admin/includes/class-wp-comments-list-table.php on line 491
    .../wp-admin/includes/class-wp-comments-list-table.php on line 492
    .../wp-admin/includes/class-wp-comments-list-table.php on line 495

    .../wp-admin/includes/class-wp-comments-list-table.php on line 499
    .../wp-admin/includes/class-wp-comments-list-table.php on line 504
    .../wp-admin/includes/class-wp-comments-list-table.php on line 506
    .../wp-admin/includes/class-wp-comments-list-table.php on line 507
    .../wp-admin/includes/class-wp-comments-list-table.php on line 509

    .../wp-includes/post-template.php on line 29

Potreste vedere più o meno errori a seconda dei plugin installati e delle impostazioni di PHP.

Una semplice query sul database può rilevare tutti i commenti “orfani” e togliervi ogni dubbio, quindi accedete al database e inserite questa query:

SELECT *
FROM wp_comments wpc
LEFT JOIN wp_posts wpp ON wpp.ID = wpc.comment_post_id
WHERE wpp.ID IS NULL;

Il risultato sarà un elenco di commenti cui non corrisponde alcun contenuto del sito, e che dovrebbero essere cancellati.

Come risolvo il problema?

La query per cancellare tutti i commenti orfani automaticamente è quella che segue:

DELETE wpc
FROM wp_comments wpc
LEFT JOIN wp_posts wpp ON wpp.ID = wpc.comment_post_id
WHERE wpp.ID IS NULL;

Una volta eseguita questa query i commenti orfani saranno spariti dal database e WordPress smetterà di lamentarsi.

Ovviamente i commenti cancellati in questo modo non sono più recuperabili, per cui vi sconsiglio di eseguire la seconda query se vi trovate in una condizione provvisoria (per esempio a metà di una importazione), e comunque è sempre consigliabile fare un backup delle tabelle prima di combinare danni.

Loading spinner

Leave a Reply

Your email address will not be published. Required fields are marked *