X
  • Дизайн та розробка сайту
  • Дизайн і створення сайтів. Розробка тем для WordPress. Створення Landing Page.
  • office@gnatkovsky.com.ua
  • @vgnat
  • Написати мені
Замовити послугу

Нумерация комментариев в WordPress без плагина

Приклад
  • 2024-03-28
  • 4175 переглядів

  • Дизайн та розробка сайту

Доброго времени суток. 🙂

Сегодня статья из рубрики WordPress и посвящена она будет нумерации комментариев. Недавно закончил работу над бесплатной темой, которую Вы можете скачать в рубрике - Темы. Так вот, при ее создании, я решил добавить нумерацию комментариям. Я раньше несколько раз это делал такую функцию, но как то даже не подумал о том, что можно написать об этом статью. Так что не будем тянуть и приступим к изучению данного вопроса.

Нумерация комментариев в WordPress

Нумерация страниц может иметь полезные свойства. Если у Вас древовидные комментарии и могут иметь не 2, а например 7 уровней и комментарии оставляются под записями очень часто, то может появится неразбериха и будет совсем не понятно кто, что комментировал и в каком порядке, а вот нумерация отлично подскажет порядок.

Стоить заметить, что все функции, который будем рассматривать, можно использовать, если у Вас используется функция вывода комментариев wp_list_comments(). Тогда у Вас должен быть файл комментариев - comments.php. Вот в нем и должна быть эта функция, хотя иногда бывает, что Вывод комментариев разбит между comments.php и functions.php. Так что если есть comments.php, а в нем нет wp_list_comments(), то смотрите в файле функций. Если У Вас нет wp_list_comments() и используется вывод по умолчанию, то можете сами создать. Как пример. статья - Древовидные комментарии WordPress без плагина.

Теперь, нужно найти внутри вывода комментариев, функцию mytheme_comment. Бывает что название другое, но в той статье что я показал Выше, название стандартное. Нужно в самое начало данной функции добавить один из 3 кодов, которые мы рассмотрим ниже.

Простая нумерация по порядку

Это нумерация для обычных комментариев, не древовидных и которые не разбиты на страницы. То есть, если Вам хочется просто пронумеровать по порядку, самый обычный список комментариев.

Для подсчета комментариев, добавляем в начало функции, вот такие строки:

global $cnum;
$cnum = isset($cnum) ? $cnum+1 : 1;

Далее Вам нужно вывести порядковый номер в нужном месте блока с комментарием. На примере кода из вышеупомянутой статьи, я вставил в блок с классом - comment-meta. Этот блок отвечает за вывод даты и времени, когда был оставлен комментарий. Ваш код может отличатся, так что смотрите внимательно и пробуйте. И так для вывода нужно прописать - $cnum, если это сделать внутри HTML кода, то код будет таким:

<?php echo $cnum ?>

Результат будет примерно таким:

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

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

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

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

Нумерация древовидных комментариев по хронологии

Данная нумерация нумерует не по-порядку расположения комментариев под записью, а по очередности написания, то есть по хронологии. Данная функция рассчитана на комментарии, которые не разбиты на страницы.

Выглядеть это будет примерно следующим образом.

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

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

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

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

По примеру видно, что 4 комментарий идет перед 3. То есть соблюдается хронология. Человек написал комментарий, на него ответил второй, потом свой коммент написал третий. Четвертый же ответил второму.

Для вывода такой нумерации в начало функции mytheme_comment добавляем уже такой код:

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];

Как и в первом варианте, для вывода нумерации, в нужном Вам месте, добавляем:

<?php echo $cnum ?>

Древовидная нумерация комментариев, разбитых на страницы.

Код подсчетов, комментариев.

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;

Вывод нумерации, как обычно:

<?php echo $cnum ?>

Древовидная нумерация комментариев с подпунктами

Данная нумерация, схожа с предыдущей, но у нее есть небольшое отличие. Заключается оно в том, что все ответы на комментарии нумеруются следующим образом:

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

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

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

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

Код для вставки в функцию, будет таким:

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 без плагина. Данные хуки помогут вам решить поставленную задачу. Конечно, если это для Вас сложно, всегда можно использовать какой-то плагин и добиться того же результата, но как по мне, то использовать плагин для такой мелочи, это лишняя нагрузка на Ваш блог, хотя решать Вам. Как по мне, полезным свойством, нумерация обладает, но только там, где она действительно нужна.

На этом все, спасибо за внимание. 🙂

Якщо Вам була корисна моя праця, можете фінансово підтримати сайт або відключити блокувальник реклами, що займе 2 хвилини :)

Хочу підтримати фінансово Хочу відключити блокувальник

Оцініть статтю
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
Проголосовало: 4, в среднем: 4.5 из 5
Читайте також