¿Cómo hacer que los comentarios funcionen para una publicación cargada por Ajax?

10

Actualmente estoy cargando una sola publicación usando ajax. Si bien la carga de la publicación funciona bien, no puedo obtener los comentarios para cargar. Aquí está mi código:

Mi javascript para cargar la publicación:

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

El javascript pasa a través de functions.php de esta manera:

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

Ahora aquí está el código donde realmente cargo el contenido de mi publicación:

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

Ahora, incluso para las publicaciones que tienen comentarios, aparece "No hay comentarios". Todo lo demás funciona correctamente. ¿Puede alguien ayudarme?

Gracias.

Yash
fuente
$linkid = "p=".$_POST["postid"];no es seguro para inyección sql. aunque Wordpess verifica esto, quizás quieras hacerlo tú mismo.
RTB

Respuestas:

1

Para citar el Codex sobre la have_commentsfunción:

Esta función se basa en el objeto global $ wp_query que se establecerá; este suele ser el caso desde The Loop

El problema es que su controlador ajax crea su propio objeto WP_Query. Tenga en cuenta que no está llamando the_post(), sino que está llamando $posti->the_post(). La misma lógica se aplica a los comentarios también.

Intenta lo siguiente:

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

En mi opinión, sería mejor ir con un JQuery .load($[this].attr('href') '.div-with-content-and-comment');

Entonces asegúrese de tener un single.php que tenga el marcado con el class="div-with-content-and-comment"que desea cargar a través de ajax.

ifdion
fuente
0

Mire la fuente de have_comments(): esta verificación recupera datos del $wp_queryobjeto global , que no se utiliza en su caso.

Entonces, el primer paso sería reemplazar el have_comments()cheque por $posti->have_comments().

Rarst
fuente