Obecnie ładuję pojedynczy post za pomocą ajax. Podczas ładowania posta działa poprawnie, nie mogę załadować komentarzy. Oto mój kod:
Mój javascript, aby załadować post:
<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>
Javascript przechodzi przez funkcje.php w ten sposób:
function implement_posts()
{
//<?php
get_template_part( 'loop', 'single' );
die();
}
Oto kod, w którym ładuję treść posta:
<?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";
}
?>
Teraz nawet w przypadku postów z komentarzami pojawia się komunikat „Brak komentarzy”. Wszystko inne działa poprawnie. Czy ktoś może mi pomóc?
Dziękuję Ci.
$linkid = "p=".$_POST["postid"];
nie jest w pełni bezpieczny. chociaż wordpess to sprawdza, możesz zrobić to sam.Odpowiedzi:
Aby zacytować kodeks
have_comments
funkcji:Problem polega na tym, że program obsługi ajax tworzy własny obiekt WP_Query. Zauważ, że nie dzwonisz
the_post()
, ale dzwonisz$posti->the_post()
. Ta sama logika dotyczy również komentarzy.Spróbuj wykonać następujące czynności:
źródło
Moim zdaniem lepiej byłoby użyć JQuery
.load($[this].attr('href') '.div-with-content-and-comment');
Następnie upewnij się, że masz plik single.php ze znacznikami,
class="div-with-content-and-comment"
które chcesz załadować za pośrednictwem ajax.źródło
Spójrz na źródło
have_comments()
- ta kontrola pobiera dane z$wp_query
obiektu globalnego , który nie jest używany w twoim przypadku.Pierwszym krokiem byłoby zastąpienie
have_comments()
czeku$posti->have_comments()
.źródło