Нумерація коментарів у 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 . Єдиною особливістю цього плагіна, яка не врахована в хаках вище, є принцип нумерації деревоподібних коментарів, номерами виділяються всі рівні вкладеності коментарів (див. картинку):

Greg's Threaded Comment Numbering у дії

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *