Предположим, что мы развиваем проект с хорошим комьюнити — это несколько администраторов, редакторов и авторов, кроме этого на проекте открыта регистрация и статус вновь зарегистрированного пользователя соответственно subscriber (подписчик). Для такого проекта было бы не плохо визуально выделить комментарии груп пользователей, т.е. к примеру, комментарий администраторов обрамлен красной рамкой, редакторов — синий и т.д.
Я часто вижу подкрашенные комментарии администратора на WordPress блогах. Проверка что текущий комментарий — комментарий определенного пользователя (администратора) можно сделать очень просто, такой строчкой кода:
if( $comment->comment_author_email == 'admin@blog.com' ) $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) : ?>
Вот, вроде, и все.
Возможно что-то не так разъяснил, спрашивайте.
Спасибо, а то раньше пользовался плагинами.
Спасибо! то что искал
Че то не работает. Комментарии остались без изменений.
Хорошее решение, все работает. Еще бы выделять комментарии залогиненого юзера, чтобы он сразу находил свое.
остатки оборудования (неликвиды по заниженным ценам) http://loza260.ucoz.ru/index/nelikvidy_oborudovanija/0-11