วิธีทำให้ความคิดเห็นทำงานสำหรับโพสต์ที่โหลดต่อ Ajax


10

ฉันกำลังโหลดโพสต์เดียวโดยใช้ Ajax ในขณะที่การโหลดโพสต์ใช้งานได้ฉันไม่สามารถรับความคิดเห็นในการโหลด นี่คือรหัสของฉัน:

จาวาสคริปต์ของฉันที่จะโหลดโพสต์:

<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>

จาวาสคริปต์จะผ่านไปยัง 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

ในการอ้างอิง Codex บน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');

กว่าทำให้แน่ใจว่าคุณมี single.php ที่มีมาร์กอัพพร้อมclass="div-with-content-and-comment"คุณต้องการโหลดผ่าน ajax


0

ดูที่แหล่งที่มาของhave_comments()- การตรวจสอบนี้จะดึงข้อมูลจาก$wp_queryวัตถุทั่วโลกซึ่งไม่ได้ใช้ในกรณีของคุณ

ดังนั้นขั้นตอนแรกจะเข้ามาแทนที่การตรวจสอบด้วยhave_comments()$posti->have_comments()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.