Ich lade gerade einen einzelnen Beitrag mit Ajax. Während das Laden nach dem Posting einwandfrei funktioniert, kann ich die Kommentare nicht laden. Hier ist mein Code:
Mein Javascript zum Laden des Beitrags:
<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>
Das Javascript durchläuft functions.php folgendermaßen:
function implement_posts()
{
//<?php
get_template_part( 'loop', 'single' );
die();
}
Hier ist der Code, in den ich meinen Post-Inhalt lade:
<?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";
}
?>
Selbst für Beiträge mit Kommentaren wird jetzt "Keine Kommentare" angezeigt. Alles andere funktioniert richtig. Kann mir jemand helfen?
Vielen Dank.
$linkid = "p=".$_POST["postid"];
ist nicht sehr SQL Injection Safe. Obwohl Wordpess dies überprüft, möchten Sie es vielleicht selbst tun.Antworten:
So zitieren Sie den Codex zur
have_comments
Funktion:Das Problem ist, dass Ihr Ajax-Handler ein eigenes WP_Query-Objekt erstellt. Beachten Sie, dass Sie nicht anrufen
the_post()
, sondern anrufen$posti->the_post()
. Die gleiche Logik gilt auch für Kommentare.Versuche Folgendes:
quelle
Meiner Meinung nach wäre es besser, mit einer JQuery zu fahren
.load($[this].attr('href') '.div-with-content-and-comment');
Stellen Sie dann sicher, dass Sie eine single.php haben, die das Markup mit dem enthält, das Sie über Ajax
class="div-with-content-and-comment"
laden möchten.quelle
Schauen Sie sich die Quelle von an
have_comments()
- diese Prüfung ruft Daten von einem globalen$wp_query
Objekt ab, das in Ihrem Fall nicht verwendet wird.Der erste Schritt wäre also, den
have_comments()
Scheck durch zu ersetzen$posti->have_comments()
.quelle