Як зробити так, щоб коментарі працювали на публікацію, завантажену на 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 проходить через function.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"];не є безпечним для ін'єкцій. хоча 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";
}

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().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.