web-dev-qa-db-fra.com

Comment faire en sorte que les commentaires fonctionnent pour un article chargé par Ajax?

Je charge actuellement un seul poste en utilisant ajax. Bien que le post-chargement fonctionne correctement, je ne peux 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 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 ayant des commentaires, le message "Aucun commentaire" s'affiche. Tout le reste fonctionne correctement. Quelqu'un peut m'aider?

Je vous remercie.

10
Yash

Pour citer le Codex sur la fonction have_comments:

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 plutôt $posti->the_post(). La même logique s'applique aussi aux commentaires.

Essayez ce qui suit:

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

Examinez la source de have_comments() - cette vérification permet d'extraire les données de l'objet global $wp_query, qui n'est pas utilisé dans votre cas.

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

0
Rarst

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

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

0
ifdion