Cum să plasez comments_template() în afara loop-ului WordPress?
Lucrez la un nou șablon și trebuie să plasez template-ul de comentarii în afara loop-ului WordPress, chiar deasupra footer-ului în fișierul single.php.
Am căutat pe Google și cel mai bun răspuns legat de problema mea este în acest link: https://stackoverflow.com/questions/6384205/displaying-the-wordpress-comments-template-outside-the-loop
Totuși, soluția respectivă nu a funcționat. Aceleași comentarii apar pe toate postările.
Deci, cum pot afișa corect comentariile în afara loop-ului WordPress?
EDIT: Acesta este conținutul fișierului 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( 'Navigare postare', 'twentytwelve' ); ?></h3>
<span class="nav-previous"><?php previous_post_link( '%link', '<span class="meta-nav">' . _x( '←', 'Link postare anterioară', 'twentytwelve' ) . '</span> %title' ); ?></span>
<span class="nav-next"><?php next_post_link( '%link', '%title <span class="meta-nav">' . _x( '→', 'Link postare următoare', 'twentytwelve' ) . '</span>' ); ?></span>
</nav><!-- .nav-single -->

ok, după o cercetare am găsit soluția. Soluția este pentru afișarea comentariilor WordPress în afara loop-ului și ca bonus cum să plasați comentariile Disqus în afara loop-ului.
În primul rând, cum să plasați comentariile WordPress în afara loop-ului:
În single.php trebuie să definim o variabilă globală nouă pentru stocarea ID-ului postului (plasați acest cod în interiorul loop-ului)
global $postid;
$postid = get_the_ID();
Apoi, putem plasa lista de comentarii în afara loop-ului cu următorul cod:
<ol class="commentlist">
<?php
//Colectăm comentariile pentru o pagină/post specific
$comments = get_comments(array(
'post_id' => $postid,
'status' => 'approve' //Schimbați această valoare pentru tipul de comentarii de afișat
));
//Afișăm lista de comentarii
wp_list_comments(array(
'per_page' => 10, //Permitem paginarea comentariilor
'reverse_top_level' => false //Arătăm cele mai recente comentarii în partea de sus a listei
), $comments);
?>
</ol>
De asemenea, puteți plasa formularul de comentarii și transmite ID-ul postului astfel:
<?php comment_form( $args, $postid ); ?>
Pentru DISQUS:
În single.php, trebuie să definim o a doua variabilă pentru a obține titlul postului (plasați acest cod în interiorul loop-ului):
global $dposttitle;
$dposttitle = wp_title( '', false);
Și apoi adăugați următorul apel oriunde doriți să afișați comentariile Disqus:
În fișierul functions.php al temei child, adăugați următoarele:
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>';
}
În final, apelați disqus_embed în afara loop-ului în single.php
disqus_embed($disqus_shortname, $postid, $dposttitle);
Vă rog să îmi spuneți dacă există o metodă mai bună de a implementa acest lucru.
