Выделяем комментарии по ролям пользователей

Раскрашиваем комментарии пользователей

Предположим, что мы развиваем проект с хорошим комьюнити — это несколько администраторов, редакторов и авторов, кроме этого на проекте открыта регистрация и статус вновь зарегистрированного пользователя соответственно subscriber (подписчик). Для такого проекта было бы не плохо визуально выделить комментарии груп пользователей, т.е. к примеру, комментарий администраторов обрамлен красной рамкой, редакторов — синий и т.д.

Я часто вижу подкрашенные комментарии администратора на WordPress блогах. Проверка что текущий комментарий — комментарий определенного пользователя (администратора) можно сделать очень просто, такой строчкой кода:

if( $comment->comment_author_email == '[email protected]' ) $class = 'admin';

но в этой статье я подойду к вопросу более глобально.

В этой статье я приведу пример того, как можно будет подсветить комментарии не только пользователей с правами админа, но и всех других: авторов, редакторов и т.д. Идея принадлежит английскому веб-разработчику Ozh. Проверив его код я был разочарован, потому что он отказался работать, но я нашел другое техническое решение. Вся задача сводится к получению роли зарегистрированного пользователя по ID и решается она так:

<?php
	$user = new WP_User( 10 );
	$role = $user->roles[0];
?>

В переменной $role хранится роль пользователя с ID 10. Например, если 10 — это администратор, то $role будет содержать administrator.

Подкрашиваем комментарии зарегистрированных пользователей

1. Добавляем CSS class (роль пользователя) к выводу комментариев.

Для этого, открываем файл темы functions.php, находим там функцию, которая отвечает за формирование вывода комментариев (в дефолтной теме twentyeleven она называется twentyeleven_comment()) и дописываем в нее код:

function twentyeleven_comment( $comment, $args, $depth ) {
	$GLOBALS['comment'] = $comment;

	// добавляем код сразу после $GLOBALS['comment'] = $comment;
	$user = new WP_User( $comment->user_id );
	$role = $user->roles[0];
	// переменную $role используем как аргумент функции comment_class($role)

	switch ( $comment->comment_type ) :
		case 'pingback' :
		case 'trackback' :
	?>
	<li class="post pingback">
		<p><?php _e( 'Pingback:', 'twentyeleven' ); ?> <?php comment_author_link(); ?><?php edit_comment_link( __( 'Edit', 'twentyeleven' ), '<span class="edit-link">', '</span>' ); ?></p>
	<?php
			break;
		default :
	?>
	<li <?php comment_class($role); ?> id="li-comment-<?php comment_ID(); ?>">
		<article id="comment-<?php comment_ID(); ?>" class="comment">
			<footer class="comment-meta">
......

Мы добавили 2 строчки кода и в функцию comment_class() добавили аргумент $role.

В результате этого изменения, к остальным CSS классам каждого комментария, будет добавлен CSS класс (роль пользователя). Примерно так, для админа:
<li class="comment byuser comment-author-kama bypostauthor odd alt thread-odd thread-alt depth-1 administrator" id="li-comment-8">

2. Задаем CSS  стили.

Вторым шагом, открываем style.css и задаем стили, которые будут отличать комментарии администраторов, авторов, редакторов, от обычных:

    #commentlist li { border:2px solid white; } /* не зарегистрированный пользователь */
    #commentlist li.administrator { border:2px solid red } /* Администратор */
    #commentlist li.editor { border:2px solid blue } /* редактор */
    #commentlist li.author { border:2px solid green } /* автор */

Для старых версий шаблона

В старых версиях шаблона вывод комментариев оформляется в файле темы comments.php, поэтому вышеописанный код нужно будет добавлять туда, после строки:
<?php foreach ($comments as $comment) : ?>

Вот, вроде, и все.

Возможно что-то не так разъяснил, спрашивайте.

Рубрика: Настройка WordPress | 01 августа 2011

Предыдущие записи из рубрики `Настройка WordPress`

5 комментариев

Дмитрий, 05.08.2011 в 01:39

Спасибо, а то раньше пользовался плагинами.

ОтветитьОтветить
Макс, 08.08.2011 в 12:39

Спасибо! то что искал

ОтветитьОтветить
Rulaf, 13.08.2011 в 17:01

Че то не работает. Комментарии остались без изменений.

ОтветитьОтветить
ws256, 30.04.2013 в 12:33

Хорошее решение, все работает. Еще бы выделять комментарии залогиненого юзера, чтобы он сразу находил свое.

ОтветитьОтветить
Николай, 10.02.2014 в 19:35

остатки оборудования (неликвиды по заниженным ценам) http://loza260.ucoz.ru/index/nelikvidy_oborudovanija/0-11

ОтветитьОтветить

Комментировать