Come posizionare comments_template() fuori dal loop in WordPress?
Sto creando un nuovo template e ho bisogno di posizionare il template dei commenti fuori dal loop WordPress, appena sopra il footer nel file single.php.
Ho cercato su Google e la risposta migliore che ho trovato relativa al mio problema è in questo link: https://stackoverflow.com/questions/6384205/displaying-the-wordpress-comments-template-outside-the-loop
Tuttavia, non ha funzionato. Gli stessi commenti appaiono in tutti i post.
Quindi, come posso visualizzare i commenti fuori dal loop wp?
MODIFICA: Questo è il file 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( 'Navigazione articolo', 'twentytwelve' ); ?></h3>
<span class="nav-previous"><?php previous_post_link( '%link', '<span class="meta-nav">' . _x( '←', 'Link articolo precedente', 'twentytwelve' ) . '</span> %title' ); ?></span>
<span class="nav-next"><?php next_post_link( '%link', '%title <span class="meta-nav">' . _x( '→', 'Link articolo successivo', 'twentytwelve' ) . '</span>' ); ?></span>
</nav><!-- .nav-single -->
<?php endwhile; // fine del 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(); ?>

ok, dopo alcune ricerche ho trovato la soluzione. La soluzione riguarda la visualizzazione dei commenti di WordPress al di fuori del loop e come bonus come posizionare anche i commenti Disqus al di fuori del loop.
Primo, come posizionare i commenti di WordPress al di fuori del loop:
In single.php dobbiamo definire una nuova variabile globale per memorizzare l'ID del post (posiziona questo dentro il loop)
global $postid;
$postid = get_the_ID();
Poi, possiamo posizionare la lista dei commenti al di fuori del loop con il seguente codice:
<ol class="commentlist">
<?php
//Raccogli i commenti per una specifica pagina/post
$comments = get_comments(array(
'post_id' => $postid,
'status' => 'approve' //Modifica questo per il tipo di commenti da visualizzare
));
//Visualizza la lista dei commenti
wp_list_comments(array(
'per_page' => 10, //Permetti la paginazione dei commenti
'reverse_top_level' => false //Mostra i commenti più recenti in cima alla lista
), $comments);
?>
</ol>
Puoi anche posizionare il form dei commenti e passare l'ID del post come segue:
<?php comment_form( $args, $postid ); ?>
Per DISQUS:
In single.php, dobbiamo definire una seconda variabile per ottenere il titolo del post (posiziona questo dentro il loop):
global $dposttitle;
$dposttitle = wp_title( '', false);
E poi aggiungi la seguente chiamata dove vuoi visualizzare i tuoi commenti Disqus:
Nel tuo tema child aggiungi la seguente funzione a functions.php:
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>';
}
Infine, chiama disqus_embed al di fuori del loop in single.php
disqus_embed($disqus_shortname, $postid, $dposttitle);
Sentiti libero di dirmi se c'è un modo migliore per implementare tutto questo.
