Пагинация комментариев (разбивка комментариев на страницы)

C вопросом пагинации комментариев могут столкнуться пользователи WordPress использующие либо старую (олдскульную) тему оформления (шаблон), либо чрезмерно упрощенную. Например, на этом блоге используется тема выводящая комментарии своим собственным кодом в файле comments.php.

Соответственно теряются все преимущества использования стандартной функции wp_list_comments, таких как использование функций показывающих навигацию по страницам комментариев, разбитых в соответствии со стандартной настройкой «обсуждения» «Разбивать комментарии верхнего уровня на страницы по…»
Рассмотрим как решить задачу, не используя расширения (плагины) от третьих лиц :) .

Во превых обратим свое внимание на официальную документацию к функции wp_list_comments.
Как видим, поддерживается callback-функция отображающая каждый комментарий к одному посту. Соотвественно, в файле comments.php мы можем вызвать стандартную функцию wp_list_comments и в качестве параметра передать ей нашу функцию отображения отдельного комментария, примерно так:

<ul id="comments" class="comments">
   <?php wp_list_comments('type=comment&callback=my_list_comments', $comments); ?>
</ul>

Куда поместить функцию my_list_comments? Пожалуй в любом wordpress-шаблоне существует файл содержащий набор пользовательских функций, в общем случае будем считать, что он называется functions.php (неожиданно, не правда ли? :) ).
Именно в него поместим функцию отображения единичного коммента:

<?php
// Пользовательская функция отображения комментария
function my_list_comments($comment, $args, $depth) {
 $GLOBALS['comment'] = $comment;
?>
<!-- содержание комментария -->
<li class="<?php echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>">
   <?php echo get_avatar($comment, 32); ?>
   <?php comment_date('d.m.y') ?> <?php comment_author_link() ?>:<span style="float:right;"><?php edit_comment_link('edit','',''); ?></span>
   <?php if ($comment->comment_approved == '0') : ?>
      <p><em>Спасибо. Ваш комментарий ожидает модерации.</em></p>
   <?php endif; ?>
   <div>
      <?php comment_text() ?>
   </div>
<?php
}  // </li> Добавит сам WordPress
?>

Соответственно теперь, мы можем использовать функции для вывода навигации по страницам комментариев, например, paginate_comments_links, например, так:

<?php
   if (get_option('page_comments')):
      $comment_pages = paginate_comments_links('echo=0');
         if ($comment_pages): ?>
            <div class="comment-navigation clear-block">
               <?php echo $comment_pages; ?>
            </div>
       <?php
  	 endif;
    endif; ?>

1 Комментарий


Добавление комментария:

 css.php