Los comentarios de wordpress no se asignan a los post adecuados

Últimamente en el estudio nos estamos haciendo como uña y carne con WordPress y es que nos están cayendo de manera consecutiva una buena serie de implantaciones de este sistema de gestión de contenidos, que implican la instalación, la configuración en el servidor, “tuneado” con un buen pack de plugins de múchos tipos (optimización SEO, sociales, organizativos, galerías de imágenes, vídeo,…) y sobre todo, adaptación gráfica total a un diseño personaliado, a veces partiendo de una base y a veces totalmente desde cero.

El último que hemos tenido la suerte de poner en marcha, tenía una serie de características que implicaban seguramente más facilidad de implantación partiendo de un tema totalmente básico (el que viene con WordPress por defecto, por ejemplo, aunque hay theme frameworks especialmetne diseñados para partir de ellos, cosa muy interesante por cierto), que la búsqueda de uno próximo visualmente y adaptación. Así que nos pusimos a manos a la obra con el tema Twenty Ten que viene con WordPress 3.

Tenemos que decir que este tema a nivel de estilos no es muy cómodo de trabajar porque ataca a muchas etiquetas de manera poco selectiva, con lo que en muchas ocasiones tienes que dar estilos que en condiciones normales no harían falta, pero no es raro encontrarse con márgenes, paddings y cosas similares que no están reseteadas, al contrario… pero bueno esto sería tema de otro post…

El motivo de esta entrada en el blog, es indicaros que es posible que en alguna ocasión, y partiendo del tema base de WordPress, o de temas que usen determinados fragmentos de código que en ocasiones vienen indicados en la documentación de WordPress, os pase que los comentarios de los usuarios se asignen a post incorrectos, es decir, cuando escribes un comentario, aparece en otro post diferente al original. Aquí tenéis la descripción del problema y también la solución aportada por el usuario llamado 7sins, que todo hay que decir, nos ha ahorrado un buen dolor de cabeza.

La clave es hacer una copia de la variable $post antes de realizar una query complementaria (como podría ser para sacar los comentarios y los trackbacks relacionados a partir de las tags por ejemplo…) y recuperar esa copia antes de sacar el formulario de comentarios además de resetear a la query original de wordpress mediante wp_reset_query();

Depende de cómo sea el código que empleas en el template del detalle del post, antes de sacar el formulario de comentarios, el lugar para tomar nuevamente la copia y resetear la query puede ser diferente, pero desde luego con esta información en mente, te ahorras muchos problemas. Aqui va nuestro caso en código:

$backup = $post;
	
	$infoRelatedPosts = '';
	$relatedPostCount = 0;

	$tags = wp_get_post_tags($post->ID);
	if ($tags) 
	{
		$tag_ids = array();
		foreach ($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;

		$args = array(
		'tag__in' => $tag_ids,
		'post__not_in' => array($post->ID),
		'showposts'=>10, 
		'caller_get_posts'=>1 );

		$my_query = new wp_query($args);
	}

	// get comment and trackback counts
	$comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $post->ID));
	$emm_comment_count = count($comments_by_type['comment']);
	$emm_trackback_count = count($comments_by_type['pings']);

luego va todo nuestor contenido de comments.php… y finalmente

// restauramos la query original y el valor de la variable $post
$post = $backup;  
wp_reset_query();
...
// código propio del form personalizado
...
// llamada a la generación del formulario personalizado
comment_form($args);