Jak sprawić, by komentarze działały dla posta ładowanego na Ajax?

10

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.

Yash
źródło
$linkid = "p=".$_POST["postid"];nie jest w pełni bezpieczny. chociaż wordpess to sprawdza, możesz zrobić to sam.
RTB,

Odpowiedzi:

1

Aby zacytować kodeks have_commentsfunkcji:

Ta funkcja opiera się na globalnym obiekcie $ wp_query, który ma zostać ustawiony - zwykle dzieje się tak z poziomu Pętli

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:

if ($posti->have_comments()) {
    echo "Comments ok";
}  else {
    echo "No comments";
}
Beowulfenator
źródło
0

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.

ifdion
źródło
0

Spójrz na źródło have_comments()- ta kontrola pobiera dane z $wp_queryobiektu globalnego , który nie jest używany w twoim przypadku.

Pierwszym krokiem byłoby zastąpienie have_comments()czeku $posti->have_comments().

Rarst
źródło