Atualmente, estou carregando uma única postagem usando ajax. Enquanto o carregamento do post funciona bem, não consigo carregar os comentários. Aqui está o meu código:
Meu javascript para carregar a postagem:
<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>
O javascript passa por functions.php desta maneira:
function implement_posts()
{
//<?php
get_template_part( 'loop', 'single' );
die();
}
Agora, aqui está o código em que eu realmente carrego meu conteúdo de postagem:
<?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";
}
?>
Agora, mesmo para postagens com comentários, estou recebendo "Nenhum comentário" exibido. Tudo o resto funciona corretamente. Alguém pode me ajudar?
Obrigado.
$linkid = "p=".$_POST["postid"];
não é seguro para injeção de verry sql. embora o wordpess verifique isso, você pode querer fazer isso sozinho.Respostas:
Para citar o Codex na
have_comments
função:O problema é que seu manipulador ajax cria seu próprio objeto WP_Query. Observe que você não está ligando
the_post()
, mas sim$posti->the_post()
. A mesma lógica se aplica aos comentários também.Tente o seguinte:
fonte
Na minha opinião, seria melhor usar um JQuery
.load($[this].attr('href') '.div-with-content-and-comment');
Depois, verifique se você possui um single.php com a marcação que
class="div-with-content-and-comment"
você deseja carregar via ajax.fonte
Veja a fonte de
have_comments()
- essa verificação recupera dados do$wp_query
objeto global , que não é usado no seu caso.Portanto, o primeiro passo seria substituir o
have_comments()
cheque por$posti->have_comments()
.fonte