Actualmente estoy cargando una sola publicación usando ajax. Si bien la carga de la publicación funciona bien, no puedo obtener los comentarios para cargar. Aquí está mi código:
Mi javascript para cargar la publicación:
<script>
$(".view_post").click(function(e) {
e.preventDefault();
postid = $(this).attr("rel");
$.ajax({
url:"/wp-admin/admin-ajax.php",
type:'POST',
data:'action=posts_open&postid='+postid,
success: function(html){
$("#b_contentwrapper").empty();
$("#b_contentwrapper").append(html);
}
});
});
</script>
El javascript pasa a través de functions.php de esta manera:
function implement_posts()
{
//<?php
get_template_part( 'loop', 'single' );
die();
}
Ahora aquí está el código donde realmente cargo el contenido de mi publicación:
<?php
$linkid = "p=".$_POST["postid"];
$posti = new WP_Query($linkid);
$posti->the_post();
echo "Time: ";
the_time('F jS, Y');
echo "<br />";
the_category(', ');
echo "<br />";
the_title();
echo "<br />";
the_content();
echo "<br />";
comment_form();
?>
</div>
<?php if (have_comments()) {
echo "Comments ok";
}
else
{
echo "No comments";
}
?>
Ahora, incluso para las publicaciones que tienen comentarios, aparece "No hay comentarios". Todo lo demás funciona correctamente. ¿Puede alguien ayudarme?
Gracias.
$linkid = "p=".$_POST["postid"];
no es seguro para inyección sql. aunque Wordpess verifica esto, quizás quieras hacerlo tú mismo.Respuestas:
Para citar el Codex sobre la
have_comments
función:El problema es que su controlador ajax crea su propio objeto WP_Query. Tenga en cuenta que no está llamando
the_post()
, sino que está llamando$posti->the_post()
. La misma lógica se aplica a los comentarios también.Intenta lo siguiente:
fuente
En mi opinión, sería mejor ir con un JQuery
.load($[this].attr('href') '.div-with-content-and-comment');
Entonces asegúrese de tener un single.php que tenga el marcado con el
class="div-with-content-and-comment"
que desea cargar a través de ajax.fuente
Mire la fuente de
have_comments()
: esta verificación recupera datos del$wp_query
objeto global , que no se utiliza en su caso.Entonces, el primer paso sería reemplazar el
have_comments()
cheque por$posti->have_comments()
.fuente