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.