Comment faire fonctionner les commentaires pour un post chargé par Ajax?

10

Je charge actuellement un seul message en utilisant ajax. Bien que le chargement du post fonctionne correctement, je ne parviens pas à charger les commentaires. Voici mon code:

Mon javascript pour charger le 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>

Le javascript passe par functions.php de cette façon:

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

Maintenant, voici le code où je charge réellement le contenu de mon message:

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

Maintenant, même pour les messages contenant des commentaires, je reçois "Aucun commentaire" affiché. Tout le reste fonctionne correctement. Quelqu'un peut m'aider?

Je vous remercie.

Yash
la source
$linkid = "p=".$_POST["postid"];n'est pas sûr pour l'injection verry sql. bien que wordpess vérifie cela, vous voudrez peut-être le faire vous-même.
RTB

Réponses:

1

Pour citer le Codex sur la have_commentsfonction:

Cette fonction repose sur l'objet global $ wp_query à définir - c'est généralement le cas depuis The Loop

Le problème est que votre gestionnaire ajax crée son propre objet WP_Query. Notez que vous n'appelez pas the_post(), mais que vous appelez $posti->the_post(). La même logique s'applique également aux commentaires.

Essayez ce qui suit:

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

A mon avis, il vaudrait mieux aller avec un JQuery .load($[this].attr('href') '.div-with-content-and-comment');

Assurez-vous que vous avez un single.php qui a le balisage avec celui que class="div-with-content-and-comment"vous souhaitez charger via ajax.

ifdion
la source
0

Regardez la source de have_comments()- cette vérification récupère les données de l' $wp_queryobjet global , qui n'est pas utilisé dans votre cas.

La première étape serait donc de remplacer have_comments()check par $posti->have_comments().

Rarst
la source