Come far funzionare i commenti per un post caricato per Ajax?


10

Attualmente sto caricando un singolo post utilizzando Ajax. Mentre il caricamento del post funziona correttamente, non riesco a caricare i commenti. Ecco il mio codice:

Il mio javascript per caricare il post:

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

Il javascript passa attraverso funzioni.php in questo modo:

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

Ora ecco il codice in cui carico effettivamente il contenuto del mio post:

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

Ora, anche per i post con commenti, visualizzo "Nessun commento". Tutto il resto funziona correttamente. Qualcuno può darmi una mano?

Grazie.


$linkid = "p=".$_POST["postid"];non è sicuro per l'iniezione sql sicura. anche se wordpess lo controlla, potresti volerlo fare da solo.
RTB

Risposte:


1

Per citare il codice sulla have_commentsfunzione:

Questa funzione si basa sull'oggetto $ wp_query globale da impostare - questo di solito avviene all'interno di The Loop

Il problema è che il gestore ajax crea il proprio oggetto WP_Query. Nota che non stai chiamando the_post(), invece stai chiamando $posti->the_post(). La stessa logica si applica anche ai commenti.

Prova quanto segue:

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

0

Secondo me, sarebbe meglio andare con un JQuery .load($[this].attr('href') '.div-with-content-and-comment');

Assicurati di avere un singolo.php che abbia il markup con quello class="div-with-content-and-comment"che vuoi caricare tramite Ajax.


0

Guarda l'origine di have_comments(): questo controllo recupera i dati dall'oggetto globale $wp_query, che non viene utilizzato nel tuo caso.

Quindi il primo passo sarebbe sostituire il have_comments()controllo con $posti->have_comments().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.