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

## Важно перед началом
Перед тем как использовать любые способы, важно обратить внимание на то, куда их вставлять. Вы можете применить описанные хакерские решения, если вывод комментариев в вашей теме не стилизован по умолчанию, то есть используется произвольная функция вывода комментариев (см. wp_list_comments()
) или если шаблон разрабатывался для версии WordPress ниже 2.7. В версии 2.7 была введена специальная функция вывода комментариев wp_list_comments()
.
1. Откройте файл вашей темы comments.php
.
2. Найдите функцию wp_list_comments()
.
3. Посмотрите на её аргументы. Если указан аргумент callback
, то нумеровать комментарии достаточно просто: код нужно вставить в начале функции, указанной в аргументе callback
(в примере ниже — это mytheme_comment
). Найдите функцию mytheme_comment
в файле functions.php
.
```php
wp_list_comments( 'type=all&callback=mytheme_comment' );
- Если вы не нашли
wp_list_comments
, код нужно вставить после строки:
foreach ( $comments as $comment ) :
Нумерация вложенных комментариев в WordPress
Хак для нумерации вложенных комментариев
Хронологическая нумерация добавленных комментариев
* Комментарий 1
* Комментарий 2
* Комментарий 4
* Комментарий 3
// Нумерация по порядку публикации поста для вложенных комментариев
global $com_id_num;
if( ! isset( $com_id_num ) ){ // собираем $com_id_num только один раз
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
// Счетчик комментариев: $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;
}
Используйте конструкцию
где нужно отобразить номер. В этом коде $cnum
содержит номер верхнего уровня комментария, а $cnum_inner
— порядковый номер вложенного комментария.
Нумерация не вложенных комментариев в WordPress
Нумерация, когда комментарии разбиты на страницы
// Для обычной нумерации, если комментарии не вложенные
// и разбиты на страницы (если не разбиты, этот код также подходит)
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
там, где необходимо отобразить номер.
Если комментарии не вложенные и не разбиты на страницы
Самая простая нумерация. Этот тип нумерации описан повсюду.
// Для обычной нумерации, если комментарии не вложенные и не разбиты на страницы
global $cnum;
$cnum = isset($cnum) ? $cnum+1 : 1;
Используйте переменную $cnum
там, где нужно отобразить номер.
Плагины
Существует также плагин для нумерации вложенных комментариев: "Greg's Threaded Comment Numbering". Единственное, чего не охватывает этот плагин, это принцип нумерации вложенных комментариев, где номера присваиваются всем уровням вложенности.