web-dev-qa-db-ja.com

Ajaxごとにロードされた投稿に対してコメントを機能させる方法は?

私は現在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";
    }
    ?>

これで、コメントがある投稿でも「コメントなし」と表示されます。他のすべては正しく機能します。誰かが私を手伝ってくれる?

ありがとうございました。

10
Yash

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";
}
1
Beowulfenator

have_comments() - のソースを見てください。このチェックはあなたのケースでは使われていないグローバルな$wp_queryオブジェクトからデータを取得します。

したがって、最初のステップはhave_comments() checkを$posti->have_comments()に置き換えることです。

0
Rarst

私の意見では、それはJQueryの.load($[this].attr('href') '.div-with-content-and-comment');と一緒に行く方が良いでしょう

あなたがajaxでロードしたいclass="div-with-content-and-comment"のマークアップを持つsingle.phpを持っていることを確認するよりも。

0
ifdion