Wie können Kommentare für einen per Ajax geladenen Beitrag funktionieren?

10

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.

Yash
quelle
$linkid = "p=".$_POST["postid"];ist nicht sehr SQL Injection Safe. Obwohl Wordpess dies überprüft, möchten Sie es vielleicht selbst tun.
RTB

Antworten:

1

So zitieren Sie den Codex zur have_commentsFunktion:

Diese Funktion basiert auf dem globalen Objekt $ wp_query, das festgelegt werden soll. Dies ist normalerweise innerhalb von The Loop der Fall

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:

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

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.

ifdion
quelle
0

Schauen Sie sich die Quelle von an have_comments()- diese Prüfung ruft Daten von einem globalen $wp_queryObjekt ab, das in Ihrem Fall nicht verwendet wird.

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

Selten
quelle