Как показать комментаторов, принимающих участие в обсуждении поста

Как показать комментаторов, принимающих участие в обсуждении поста | n-wp.ru
Пример кода, выводящего первых трех комментаторов, с аватарами и ссылками на их сайты, и подсчитывающих количество всех остальных.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

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

Как показать рядом с количеством комментариев, кто принимает участие в обсуждении

Так же есть и другой момент — если комментаторов слишком много, их простой список может получиться слишком длинным, что не очень красиво смотрится. Поэтому тут нужно выводить не всех комментаторов подряд, а только определенное количество первых, а остальных можно вывести и в виде простой цифры. Если вы хотите показать самых первых комментаторов и подсчитать всех остальных, то вам поможет специальная функция.

Откройте файл functions.php и добавьте в него следующий код:

function tp_discussion_links() {
	echo tp_get_discussion_links();
}
	function tp_get_discussion_links() {
		global $post;
		$content = '';
		$unique_commentors = array();

		$comments = get_comments( array( 'post_id' => $post->ID ) );

		foreach ( $comments as $comment )
			if ( '1' == $comment->comment_approved )
				$unique_commentors[$comment->comment_author_email] = $comment;

		$total_unique_commentors = count( $unique_commentors );

		$counter = 1;
		foreach ( $unique_commentors as $comment ) {
			if ( $counter > 3 )
				break;

			if ( 1 != $counter && $total_unique_commentors == $counter )
				$content .= __( ' и ', 'Theme' );
			else if ( 1 != $counter )
				$content .= ', ';

			$content .= get_avatar( $comment, 16 ) . ' ' . get_comment_author_link( $comment->comment_ID );

			$counter++;
		}

		if ( $total_unique_commentors > 3 )
			if ( ( $total_unique_commentors - 3 ) != 1 )
				$content .= sprintf( __( ' и еще %s</span>', 'Theme' ), ( $total_unique_commentors - 3 ) );
			else
				$content .= __( ' и еще один', 'Theme' );
		else {
			if ( $total_unique_commentors == 1 )
				$content .= __( '', 'Theme' );
			else
				$content .= __( '', 'Theme' );
		}

		return $content;
	}

Функция tp_get_discussion_links формирует список первых трех комментаторов, оставивших свои отзывы к посту, ориентируясь на их e-mail. Если в обсуждении принимало участие больше трех комментаторов, то будет подсчитано количество остальных. У каждого комментатора выводится аватар, и, если он указывал при комментировании, ссылка на сайт. Функция tp_discussion_links выводит полученный список в указанном вами месте.

Чтобы вывести список первых комментаторов, нужно вставить код

</pre>
<p>внутри цикла</p>
<pre>
...цикл вывода постов ...

Пользуйтесь!

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. sitemaker

    Побоялся делать вот так:

    $unique_commentors[$comment->comment_author_email] = $comment;

    Сделал так:

    $unique_commentors[$comment->user_id] = $comment;
    Ответить
  2. Zaza

    Чтобы вывести список первых комментаторов, нужно вставить код

    А где код та? Поле пустое

    Ответить