web-dev-qa-db-fra.com

Comment placer comments_template (); en dehors de la boucle?

Je crée un nouveau modèle et je dois placer le modèle de commentaires en dehors de la boucle wordpress et juste au-dessus du pied de page dans le fichier single.php.

J'ai cherché sur google et la meilleure réponse que j'ai pu trouver concernant mon problème se trouve dans ce lien: https://stackoverflow.com/questions/6384205/displaying-the-word-comments-template-outside-the-loop

Cependant, cela n'a pas fonctionné. Les mêmes commentaires apparaissent sur tous les articles.

Alors, comment puis-je afficher les commentaires affichés en dehors de la boucle wp?

EDIT: Ceci est le fichier single.php

<?php
get_header(); ?>

<div id="primary" class="site-content">
    <div id="content" role="main">

        <?php while ( have_posts() ) : the_post(); ?>

            <?php get_template_part( 'content-single', get_post_format() ); ?>

            <nav class="nav-single">
                <h3 class="assistive-text"><?php _e( 'Post navigation', 'twentytwelve' ); ?></h3>
                <span class="nav-previous"><?php previous_post_link( '%link', '<span class="meta-nav">' . _x( '&larr;', 'Previous post link', 'twentytwelve' ) . '</span> %title' ); ?></span>
                <span class="nav-next"><?php next_post_link( '%link', '%title <span class="meta-nav">' . _x( '&rarr;', 'Next post link', 'twentytwelve' ) . '</span>' ); ?></span>
            </nav><!-- .nav-single -->



        <?php endwhile; // end of the loop. ?>

    </div><!-- #content -->
</div><!-- #primary -->
<div id="secondary" class="sidebar-area" role="complementary">
    <?php get_sidebar(secondary); ?>
    <?php get_sidebar(); ?>
</div><!-- #secondary -->

<?php
comments_template( '', true );
?>

 <?php get_footer(); ?>
4
Gixty

ok, après quelques recherches, j'ai trouvé la solution. La solution consiste à afficher des commentaires wordpress en dehors de la boucle et, en prime, à placer également des commentaires discrets en dehors de la boucle.

Premièrement, comment placer des commentaires wordpress en dehors de la boucle:

Dans single.php, nous devons définir une nouvelle variable globale pour stocker l'identifiant de la publication (placez-la dans la boucle).

global $postid;
$postid = get_the_ID();

Ensuite, nous pouvons placer la liste des commentaires en dehors de la boucle avec le code suivant:

<ol class="commentlist">
    <?php    
        //Gather comments for a specific page/post 
        $comments = get_comments(array(
            'post_id' => $postid,
            'status' => 'approve' //Change this to the type of comments to be displayed
        ));

        //Display the list of comments
        wp_list_comments(array(
            'per_page' => 10, //Allow comment pagination
            'reverse_top_level' => false //Show the latest comments at the top of the list
        ), $comments);

    ?>
</ol>

Vous pouvez également placer le formulaire de commentaire et transmettre l'identifiant de l'article comme suit:

<?php comment_form( $args, $postid ); ?>

Pour DISQUS:

Dans single.php, nous devons définir une seconde variable pour obtenir le titre de l'article (placez-le dans la boucle):

global $dposttitle;
$dposttitle = wp_title( '', false);

Ajoutez ensuite l’appel suivant où vous souhaitez afficher vos commentaires Disqus:

Dans les fonctions de thème de votre enfant, ajoutez les éléments suivants:

function disqus_embed($disqus_shortname, $postid, $dposttitle) {
    global $post;
    wp_enqueue_script('disqus_embed','http://'.$disqus_shortname.'.disqus.com/embed.js');
    echo '<div id="disqus_thread"></div>
    <script type="text/javascript">
        var disqus_shortname = "'.$disqus_shortname.'";
        var disqus_title = "'.$dposttitle.'";
        var disqus_url = "'.get_permalink($postid).'";
        var disqus_identifier = "'.$disqus_shortname.'-'.$postid.'";
    </script>';
}

Enfin, appelez disqus_embed en dehors de la boucle dans single.php

disqus_embed($disqus_shortname, $postid, $dposttitle);

S'il vous plaît, n'hésitez pas à me dire s'il existe un meilleur moyen de mettre cela en œuvre.

8
Gixty