Нумерация комментариев в WordPress
Сегодня, хочу поделиться различными вариантами своих кодов, благодаря которым можно пронумеровать комментарии в WordPress.
Тема нумерации комментариев в WordPress уже неоднократно поднималась на блогах и форумах, однако один из вариантов я так нигде и не встречал, ровно так же, как и не видел всех собранных вариантов в одной статье. Так же, некоторые из решений, на мой взгляд, не самые лучшие (с лишними запросами к данным, вроде: get_option('page_comments') ). Все это легло в основе решения написать этот пост.

Прежде чем использовать хаки ниже нужно обратить внимание на то куда их вставлять. Воспользоваться хаками можно, если вывод комментариев у вас в шаблоне оформлен не по умолчанию, т.е. используется произвольная функция вывода комментариев (см. wp_list_comments()) или если шаблон разрабатывался под версию ниже 2.7. В 2.7 была введена специальная функция вывода комментариев wp_list_comments().
Откройте файл темы comments.php, найдите там функцию wp_list_comments() и посмотрите её аргументы, если указан аргумент callback
, то все нормально пронумеровать комменты получится, довольно просто: код нужно вставлять в начало функции, которая указана в аргументе callback (в примере ниже это mytheme_comment). Ищите функцию (mytheme_comment) в файле темы functions.php.
wp_list_comments( "type=all&callback=mytheme_comment" );
Если wp_list_comments вы не нашли, то вставлять код нужно после строки:
foreach ( $comments as $comment ) :
Нумерация древовидных комментариев в WordPress
Хаки для нумерации древовидных комментариев:
Нумерация по хронологии добавления комментариев
- Комментарий 1
- Комментарий 2
- Комментарий 4
- Комментарий 3
<?php // Нумерация по порядковому номеру публикации, для древовидных комментариев global $com_id_num; if( ! isset( $com_id_num ) ){ // чтобы $com_id_num собирался 1 раз foreach( $GLOBALS['wp_query']->comments as $com ){ if( $args['type'] == 'comment' && $com->comment_type != '' ){ continue; } $com_id_num[ $com->comment_ID ] = ++$n; } } $cnum = $com_id_num[ $comment->comment_ID ]; // переменная $cnum содержит номер комментария
Используйте переменную $cnum в том месте, где нужно вывести номер.
Древовидная нумерация (как на этом блоге)
- Комментарий 1
- Комментарий 1.1
- Комментарий 1.2
- Комментарий 2
<?php # Счетчик комментариев: $cnum - верхний уровень, $cnum_inner - вложенные global $cnum, $incnum, $comment_depth; // определяем первый номер, если включено разделение на страницы $per_page = isset( $args['per_page'] ) ? $args['per_page'] : $GLOBALS['wp_query']->query_vars['comments_per_page']; if( $per_page && ! isset( $cnum ) ){ $com_page = (int) $GLOBALS['wp_query']->query_vars['cpage']; if( $com_page > 1 ){ $cnum = ( $com_page - 1 ) * (int) $per_page; } } // счетчик if( $comment_depth > 1 ){ $cnum_inner = '.' . $incnum++; } else{ $cnum++; $incnum = 1; }
Используйте конструкцию
<?php echo $cnum ?><sub><?php echo $cnum_inner ?></sub>
в том месте, где нужно вывести номер.
В этом коде $cnum
содержит номер верхнего уровня комментариев, а $cnum_inner
- порядковый номер вложенных комментов.
Нумерация не древовидных комментариев в WordPress
Нумерация, если комментарии разбиваются на страницы
<?php # Для обычной нумерации, если комментарии не древовидные # и разбиваются на страницы (если не разбиваются, код тоже подходит) global $cnum; // определяем первый номер, если включено разделение на страницы $per_page = $args['per_page'] ? $args['per_page'] : $GLOBALS['wp_query']->query_vars['comments_per_page']; if( $per_page && ! isset( $cnum ) ){ $com_page = (int) $GLOBALS['wp_query']->query_vars['cpage']; if( $com_page > 1 ){ $cnum = ( $com_page - 1 ) * (int) $per_page; } } // считаем $cnum = isset( $cnum ) ? $cnum + 1 : 1; // переменная $cnum содержит номер комментария
Используйте переменную $cnum в том месте, где нужно вывести номер.
Если комментарии не древовидные и не разбиваются на страницы
Самая банальная нумерация. В основном, везде описывается этот тип нумерации.
<?php # Для обычной нумерации, если комментарии не древовидные и не разбиваются на страницы global $cnum; $cnum = isset($cnum) ? $cnum+1 : 1; ?>
Используйте переменную $cnum в том месте, где нужно вывести номер.
Плагины
Также, для древовидной нумерации комментариев существует плагин: Greg's Threaded Comment Numbering. Единственной особенностью этого плагина, которая не учтена в хаках выше является принцип нумерации древовидных комментариев, номерами выделяются все уровни вложенности комментариев (см. картинку):
