Как заставить комментарии работать на пост, загруженный в Ajax?

10

В настоящее время я загружаю один пост, используя ajax. Пока загрузка сообщений работает нормально, я не могу загрузить комментарии. Вот мой код:

Мой javascript для загрузки поста:

<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 проходит через functions.php следующим образом:

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

Теперь вот код, куда я на самом деле загружаю содержимое своего сообщения:

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

Теперь даже для сообщений с комментариями отображается сообщение «Без комментариев». Все остальное работает правильно. Может кто-нибудь мне помочь?

Спасибо.

Яши
источник
$linkid = "p=".$_POST["postid"];не верный SQL инъекций безопасно. хотя WordPess проверяет это, вы можете сделать это самостоятельно.
RTB

Ответы:

1

Чтобы процитировать кодекс have_commentsфункции:

Эта функция полагается на глобальный объект $ wp_query, который должен быть установлен - это обычно имеет место в Цикле

Проблема в том, что ваш обработчик ajax создает свой собственный объект WP_Query. Обратите внимание, что вы не звоните the_post(), вы звоните $posti->the_post(). Та же логика применима и к комментариям.

Попробуйте следующее:

if ($posti->have_comments()) {
    echo "Comments ok";
}  else {
    echo "No comments";
}
Beowulfenator
источник
0

На мой взгляд, было бы лучше пойти с JQuery .load($[this].attr('href') '.div-with-content-and-comment');

Затем убедитесь, что у вас есть файл single.php с разметкой, которую class="div-with-content-and-comment"вы хотите загрузить через ajax.

ifdion
источник
0

Посмотрите на источник have_comments()- эта проверка извлекает данные из глобального $wp_queryобъекта, который не используется в вашем случае.

Поэтому первым шагом будет замена have_comments()чека на $posti->have_comments().

Rarst
источник