web-dev-qa-db-fra.com

Le lien Comment `Reply` ne fonctionne pas si les commentaires sont chargés depuis ajax

J'écris un plugin qui affiche une page d'accueil personnalisée qui est en fait seulement un post avec des commentaires . La première page d'accueil est affichée par l'appel initial par php. Ensuite, l'utilisateur peut cliquer sur un bouton de menu pour obtenir un autre message. Ceci est géré par ajax. Donc, la page entière ne recharge pas.

Obtenir et afficher d'autres articles via ajax fonctionne bien jusqu'à ce que j'actualise la page via ajax. Ensuite, le lien commentaire reply ne fonctionne plus.

J'ai implémenté [système de commentaires AJAXified] [1] mais je suppose que cela n'a rien à voir avec le lien de réponse.

Le lien de réponse avant l'utilisation de ajax ressemble à

<a onclick="return addComment.moveForm(&quot;div-comment-11&quot;, &quot;11&quot;, &quot;respond&quot;, &quot;8&quot;)" 
href="/?replytocom=11#respond" class="comment-reply-link">Reply</a>

Lorsque le même message est chargé via ajax, le bouton de réponse ressemble à

<a onclick="return addComment.moveForm(&quot;div-comment-11&quot;, &quot;11&quot;, &quot;respond&quot;, &quot;8&quot;)" 
href="/wp-admin/admin-ajax.php?replytocom=11#respond" class="comment-reply-link">Reply</a>

La différence est dans l'attribut href. La seconde (ajax) a une partie wp-admin/admin-ajax.php qui n'est pas supposée être là.

J'utilise une fonction php pour générer du code html à la fois pour l'affichage de la première fois et pour l'appel ajax aussi.

Une partie de la fonction ressemble à

   function my_get_comments($post_id, $number_of_comments){
    //Gather comments for a specific post 
    $comments =     get_comments(array(
        'number' => $number_of_comments,
        'post_id' => $post_id,
        'status' => 'approve' //Change this to the type of comments to be displayed
    ));

    ob_start(); //workaround how to capture the output from comments_number() function
        comments_number( 'no comments', 'one comment', '% comments' );
    $capture_comments_number = ob_get_clean();

    $return_string ='<div id="comments_container">'
                    . '<style type="text/css">.hidden{display:none;}</style>'
                    . '<div id="comments_number">'
                        . $capture_comments_number
                        . '<a class="comment_switch"> Show / Hide Comments</a>'
                    . '</div>'
                    . '<div class="comments">'
                    . '<ol class="commentlist">';


    //Display / format the list of comments

    ob_start(); //workaround how to capture the output from wp_list_comments() function
        wp_list_comments(array(
            'reverse_top_level' => false //Show the latest comments at the top of the list
        ), $comments);
    $capture_wp_list_comments = ob_get_clean();
    return $return_string;
}

    ob_start(); //workaround how to capture the output from comment_form() function
        comment_form("", $post_id);
    $capture_comment_form = ob_get_clean();


    $return_string = $return_string 
                . $capture_comment_form
                . '</div>'
                . '</div>';

Je dois réparer la partie href du lien de réponse?

2
Radek

J'ai réalisé que comment-reply.js n'est pas chargé et le problème a été résolu.

Quelqu'un pourrait-il expliquer? Je n'ai aucune idée de ce qui s'est passé.

Le correctif consistait donc à ajouter wp_enqueue_script( 'comment-reply' ); à mon code de plugin.

2
Radek