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.


$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";
}

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.


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().

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.