web-dev-qa-db-de.com

Wie mache ich Kommentare für einen Beitrag, der per Ajax geladen wurde?

Ich lade gerade einen einzelnen Beitrag mit Ajax. Während das Nachladen funktioniert, kann ich die Kommentare nicht laden. Hier ist mein Code:

Mein Javascript um den Beitrag zu laden:

<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 die functions.php folgendermaßen:

function implement_posts()
{
    //<?php
    get_template_part( 'loop', 'single' );
    die();
}

Hier ist der Code, in den ich meinen Beitragsinhalt 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";
    }
    ?>

Jetzt bekomme ich auch für Posts mit Kommentaren "Keine Kommentare" angezeigt. Alles andere funktioniert einwandfrei. Kann mir jemand weiterhelfen?

Vielen Dank.

10
Yash

So zitieren Sie den Codex für die Funktion have_comments:

Diese Funktion basiert auf dem zu setzenden globalen $ wp_query-Objekt - dies ist normalerweise in The Loop der Fall

Das Problem ist, dass Ihr Ajax-Handler ein eigenes WP_Query-Objekt erstellt. Beachten Sie, dass Sie nicht the_post() anrufen, sondern $posti->the_post(). Die gleiche Logik gilt auch für Kommentare.

Versuche Folgendes:

if ($posti->have_comments()) {
    echo "Comments ok";
}  else {
    echo "No comments";
}
1
Beowulfenator

Betrachten Sie die Quelle von have_comments() - Diese Prüfung ruft Daten vom globalen Objekt $wp_query ab, das in Ihrem Fall nicht verwendet wird.

Der erste Schritt wäre also, have_comments() check durch $posti->have_comments() zu ersetzen.

0
Rarst

Meiner Meinung nach wäre es besser, mit einer JQuery zu gehen .load($[this].attr('href') '.div-with-content-and-comment');

Stellen Sie dann sicher, dass Sie eine single.php haben, die das Markup mit dem class="div-with-content-and-comment" enthält, den Sie über Ajax laden möchten.

0
ifdion