Нумерація коментарів у WordPress
Сьогодні хочу поділитися різними варіантами своїх кодів, завдяки яким можна пронумерувати коментарі в WordPress .
Тема нумерації коментарів у WordPress вже неодноразово піднімалася на блогах і форумах, однак один із варіантів я так ніде і не зустрічав, так само, як і не бачив усіх зібраних варіантів в одній статті. Так само деякі з рішень, на мій погляд, не найкращі (з зайвими запитами до даних, на кшталт: get_option(‘page_comments’) ). Все це лягло в основі рішення написати цю посаду.
Перш ніж використовувати хакі нижче, потрібно звернути увагу на те, куди їх вставляти. Скористатися хаками можна, якщо висновок коментарів у шаблоні оформлений за замовчуванням, тобто. використовується довільна функція виведення коментарів (див. wp_list_comments() ) або, якщо шаблон розроблявся під версію нижче 2.7. У 2.7 було введено спеціальну функцію виведення коментарів [wp_list_comments()](/function/wp_list_comments()).
Відкрийте файл теми comments.php , знайдіть там функцію [wp_list_comments()](/function/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 . Єдиною особливістю цього плагіна, яка не врахована в хаках вище, є принцип нумерації деревоподібних коментарів, номерами виділяються всі рівні вкладеності коментарів (див. картинку):