J'utilise des commentaires paginés et filetés avec:
S'il y a 21 commentaires au total, la première page ne contient que 1 commentaire - le plus récent. Comment puis-je obtenir les 10 derniers commentaires toujours affichés sur la première page?
J'utilise WordPress 3.0.3. Edit: Mis à niveau vers la version 3.1, le problème existe toujours ...
Edit: J'ai oublié d'ajouter le code que j'utilise. J'utilise un rappel pour les commentaires listés, voici:
function mytheme_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
<div id="comment-<?php comment_ID(); ?>" class="comment">
<?php if(function_exists('hkTC_comment_title'))
hkTC_comment_title($comment->comment_ID,'<strong class="comment-title">','</strong>');
?>
<?php comment_text() ?>
<span class="written-by">
Skrivet av:
<?php
$commentAuthID = get_comment(get_comment_ID())->user_id;
echo the_author_meta('first_name',$commentAuthID)." ";
echo the_author_meta('last_name',$commentAuthID);
?>
<em>kl. <?php echo get_comment_time('H.i'); ?>, den <?php echo get_comment_date('j F Y'); ?></em>
</span>
<div class="reply">
<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
</div>
</div>
<?php }
La fonction hkTC_comment_title provient de ce plugin que j'utilise également: http://wordpress.org/extend/plugins/hikari-title-comments/ Mais cela ne devrait pas jouer avec le nombre de commentaires que je pense.
Modifier: Voici mon modèle personnalisé utilisé pour afficher la page avec les commentaires: http://123.writeboard.com/4x2m38ifvnkrct7l
C'est en effet le comportement par défaut de WordPress. Les commentaires restent toujours sur la même page de commentaire, donc si vous affichez la dernière page de commentaire en premier, cette dernière page de commentaire n'aura pas toujours le nombre "complet" de commentaires. L'avantage de garder un commentaire toujours sur la même page de commentaire est que l'URL reste toujours la même, sinon un commentaire peut être déplacé vers une autre page lorsque de nouveaux commentaires sont ajoutés.
Mais c'est agaçant et j'avais besoin d'une solution de contournement pour cela aussi. Je n’ai trouvé aucun moyen (facile?) De faire cela avec les crochets WordPress. J’ai donc découpé moi-même le tableau de commentaires en lisant la variable de requête cpage
(page de commentaire). Méfiez-vous de cette variable, car WordPress sera très utile pour l'inverser pour vous lorsque vous définissez la "première/dernière page de commentaire en premier" sur "dernier". ".
Ce code va dans le fichier de thème comments.php
, car il lit la variable globale $comments
. Je n'ai pas utilisé de rappel de commentaire (il s'agissait d'un code très simple), mais vous pouvez toujours transmettre le tableau $comments_to_display
nouvellement découpé à wp_list_comments()
en second argument. Il utilisera alors ce paramètre au lieu de tous les commentaires. Je ne sais pas comment cela fonctionnera avec les commentaires threadés (comment fonctionnent-ils avec les commentaires paginés "normaux"?).
$comments_to_display = $comments;
/*
* Display the comments over pages, with the newest comments on the first page
* Special in this code (not in WP by default) is that the first page will contain 5 comments,
* and the final page can contain less comments.
*/
$comments_per_page = 5; // MAYBE: use get_option()?
$comment_page = get_query_var( 'cpage' );
$comment_this_page_start = 0;
$comment_this_page_count = $comments_per_page;
$oldest_comment_page_count = count( $comments_to_display ) % $comments_per_page;
if ( 0 == $oldest_comment_page_count ) {
$oldest_comment_page_count = $comments_per_page;
}
if ( 1 == $comment_page ) {
$comment_this_page_count = $oldest_comment_page_count;
} else {
$comment_this_page_start = $oldest_comment_page_count + ($comment_page - 2) * $comments_per_page;
}
$comments_to_display = array_slice( $comments_to_display, $comment_this_page_start, $comment_this_page_count );
// You probably want to array_reverse() $comments_to_display, currently it shows the oldest on top.
// Then you should be able to pass $comments_to_display to wp_list_comments() and it will use your shorter array instead.