El pasado 20 de mayo escribí una entrada sobre el proceso de (re)instalación de un blog basado en un fichero WXR, que es el resultante de poner en práctica la función de exportación de WordPress. De aquél proceso salió renacida La Bitácora del Tigre, pero con un defectillo que hasta hoy no había subsanado, a causa -lo reconozco humildemente- de la pereza que suele atacarme cuando se trata de afrontar pesadas tareas rutinarias.
El problema, que ya había descrito en Más sobre la exportación e importación de blogs en WordPress, consiste en que el campo comment_count de la tabla wp_posts no se actualiza en relación con el número de los comentarios de cada entrada. Dicho en otros términos: que si la entrada XXX tiene cinco comentarios, WordPress no se entera de dicho valor al completar la importación, y tanto en la información de la entrada como en el epígrafe de «entrada relacionadas» hace figurar un «Sin comentarios» o («0 comentarios», según las traducciones), no sólo falso y feo, sino notoriamente injusto.
El problema se resuelve por sí solo cuando una entrada recibe nuevos comentarios (entonces WordPress sí «sabe» contarlos correctamente), y por otra parte la información que figura en las entradas sin comentarios adicionales se puede recuperar manualmente editando la base de datos (con el phpMyAdmin, por ejemplo), pero ambas soluciones son insatisfactorias por motivos obvios. En todo caso, anteayer ya estaba dispuesto a invertir unas cuantas horas de las vacaciones en una tediosa sesión de MySQL (suelo ponerme música clásica para estos menesteres) cuando de repente se me ocurrió la idea de consultar los foros de WordPress a la caza y captura de algún automatismo que resolviera el entuerto.
Y, efectivamente, el automatismo existe, como puede comprobarse en este hilo: [resolved] MySQL Table For Comment Count Incorrect Although Comments Are There. El truco, que exige realizar antes de nada una copia de seguridad de la base de datos (o mejor dos, por si acaso), consiste en ejecutar el código que proporciona Haochi, un jovencísimo usuario (dice que no tiene edad para beber las cervezas con que le queramos obsequiar sus agradecidos colegas), para lo cual basta con copiarlo en un documento, salvarlo con la extensión .php y ejecutarlo en el directorio donde está alojado el blog:
<?php
include('wp-config.php');
$posts = mysql_fetch_row(mysql_query("SELECT ID FROM wp_posts ORDER BY ID DESC LIMIT 1"));
function update_comment_count(){
for($i=1;$i<($posts[0]+1);$i++){
$comments = mysql_query("SELECT SQL_CALC_FOUND_ROWS comment_ID FROM wp_comments WHERE comment_post_ID = '$i' AND comment_approved = 1;");
mysql_query("UPDATE wp_posts SET comment_count = '".mysql_num_rows($comments)."' WHERE id = '$i';");
}
return true;
}
if(update_comment_count()){
echo "successful";
}
?>
Este script no sólo hace lo que debe, sino que además devuelve una relación completa de todas las entradas actualizadas, lo cual viene muy bien para realizar las comprobaciones oportunas. De hecho, acabo de verificar que ya sólo tengo 137 entradas sin comentar, lo cual supone que el script ha solucionado los problemas de contabilización en cerca de cien casos. Es cierto que cerca de un tercio de las entradas del blog siguen huérfanas de comentarios, pero algo es algo. Como bien dice el refrán, el que no se consuela es porque no quiere.
Últimos comentarios