如何使评论对每个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

Answers:


1

have_comments函数上引用食典:

此函数依赖于要设置的全局$ wp_query对象-通常在The Loop中就是这种情况

问题是您的ajax处理程序创建了自己的WP_Query对象。请注意,您不是在打电话the_post(),而是在打电话$posti->the_post()。同样的逻辑也适用于注释。

请尝试以下操作:

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

0

我认为,最好使用JQuery .load($[this].attr('href') '.div-with-content-and-comment');

比确保您有一个具有class="div-with-content-and-comment"要通过ajax加载的标记的single.php 。


0

查看来源have_comments()-此检查从全局$wp_query对象中检索数据,在您的情况下不使用该数据。

因此,第一步是将have_comments()check 替换为$posti->have_comments()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.