Дополнение к заметке как быстро отличить подписанного комментатора. Я полагала, что способ выделить комментарии подписанных пользователей давно известен, но оказалось, что «давно» не означает «широко». Пришлось добавить такую шпаргалку, что всё было вместе и далеко ходить требовалось. Шпаргалка требует знания html, немножко css и немножко php.
Прежде всего надо убедиться, что тема вашего блога использует свою функцию комментариев. Для этого открываем файл comments.php и находим функцию, выводящую комментарии: wp_list_comments()
. В скобках может быть список из нескольких аргументов, нам же нужен аргумент callback: wp_list_comments('callback=my_comments')
. Если он есть, идём в файл function.php и ищем функцию с именем my_comments (иногда она находится прямо в comments.php, так что сначала стоит проверить его); следующую главу в этом случае можно пропустить. Если нет, всё равно идём в function.php и создаём недостающую функцию сами.
Создание собственной функции для вывода комментариев
Можно использовать функцию, которую предлагает Codex WordPress, но я считаю её слишком громоздкой (туда напихано много лишнего на разные случаи жизни), поэтому для начала рекомендую использовать вот эту:
<? //Комментарии function my_comments($comment, $args, $depth){ global $wpdb, $post; $GLOBALS['comment'] = $comment; ?> <li <?php comment_class(); ?> id="comment-<?php comment_ID() ?>"> <div id="div-comment-<?php comment_ID(); ?>" class="commentdiv <?php if(function_exists('comment_subscription_status')){ if(comment_subscription_status()){echo 'subscribed';} } ?>"> <div class="comment-author vcard"> <?php echo get_avatar($comment, $size='32'); ?> <p><cite class="fn"><?php comment_author_link() ?></cite></p> <div class="commentmetadata" datetime="<? comment_date('Y-m-d'); ?>"> <a href="<?php echo htmlspecialchars(get_comment_link($comment->comment_ID)); ?>"> <?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?> </a> <?php edit_comment_link(__('(Edit)'),' ','') ?> </div> </div> <div class="ctext"> <?php if($comment->comment_approved == '0'){ ?> <p><em>Ваш комментарий ожидает проверки модератором.</em></p> <?php } comment_text(); ?> </div> <div class="reply"> <?php comment_reply_link(array_merge($args, array( 'add_below' => 'div-comment', 'reply_text' => 'Ответить на этот комментарий', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div> </div> <?php } ?>
Вставляем этот код в function.php (помним о правописании: функция должна находиться внутри открывающих и закрывающих скобок < ? и ?>). И не забываем добавить в функцию wp_list_comments вызов своих комментариев:
<ol>wp_list_comments('callback=my_comments')</ol>
или
<ol>wp_list_comments(array('callback'=>'my_comments')</ol>
А теперь добавляем в эту функцию код, отмечающий подписанного комментатора. Код выглядит так:
<? if(function_exists('comment_subscription_status')){ if(comment_subscription_status()){echo 'subscribed';} } ?>
В какое место его вставить — решать вам. У меня, например, этот код добавляет комментарию класс, которому в css приписана фоновая картинка-конверт, и title (всплывающую подсказку) с сообщением «Подписан на комментарии». Выглядит это так:
<div id="div-comment-<?php comment_ID(); ?>" class="commentdiv <?php if(function_exists('comment_subscription_status')){ if(comment_subscription_status()){echo 'subscribed';} } ?>">
и
<div class="reply"<?php if(function_exists('comment_subscription_status')){ if(comment_subscription_status()){ echo ' title="Подписан на комментарии"'; } } ?>>
Добавляем, отмечаем.
23 комментария на «WordPress: как отметить комментарии подписанного посетителя»
Andrey
Спасибо большое) Пригодилось, только с настройкой стилей помучался… А так вообщем-то доволен!
P.S.: Вот блог пока на uCoz, как раз на денвере подготавливаю wp для переноса
dim3ka (1 комментарий)
Со стилями могу помочь, а вообще лучше всего самому выучить css. Так как не зная css вы не сможете украсить красиво страницу, тем более разобраться в движке вордпресса, там просто гиганские файлы стилей у темы.
Не советую вам использовать движок вп, лучше дле, он меньше грузит сервер. Но то, что вы ушли от укоза, уже похвально.
Княгиня (661 комментарий)
Css нужен не только для «красиво оформить» — без него даже простейшая визуальная размётка невозможна. И вообще сайт должен быть не «красивым», а функциональным (и для этого-то и надо использовать css).
Dle, насколько я помню, в бесплатной версии имеет урезанные возможности. ВП в этом смысле никак не ограничен.
Postrk (1 комментарий)
Вот оно что, весьма полезно. Поставилось сразу, как влитое. Давно искал такой способ, но никак не мог найти.
Антон (3 комментария)
Хм… Смысла особого не вижу. Тем не менее, если это вдруг кому-то и нужно, неужели нет готового плагина? Кстати, может быть вы его и напишите?
Юлия Панина aka Княгиня (661 комментарий)
Не напишу. Способ, кстати, давно известный, им пользуются многие известные блоггеры — dimox, например.
Галина (1 комментарий)
Все здорово, но я почему-то не нашла функцию wp_list_comments()в файле comments.php
Такое может быть? А чем тогда выводятся комментарии?
Юлия Панина aka Княгиня (661 комментарий)
Заочно трудно советовать. Вы не нашли саму функцию или её вызов? Вызов надо искать в виде строки «wp_list_comments» — без скобок. Если в comments.php её совсем нет, можно попробовать поискать в single.php, если он имеется.
Тимур (5 комментариев)
Огромное спасибо. Все получилось. Правда, я реализовал эту функцию уже на другом проекте, т.к. лень было переделывать. Зато на новом сайте сделал все с нуля и получилось просто отлично. Еще раз бАлшое спасибо)))
Леся (1 комментарий)
Александр (9 комментариев)
Моя тема(АКАДЕМИЯ) не хочет работать с таким подселением,это уже не первый случай когда я её хочу подкорректировать
Княгиня (661 комментарий)
Такое «подселение» можно сделать в любой теме. Просто некоторые темы требуют индивидуального подхода. Кроме того (поскольку я не знаю, насколько вы разбираетесь в php), имеет смысл проверить пунктуацию. Может быть, вы в functions.php угловые скобки ставите не вовремя?
Александр (9 комментариев)
Это стало после того как я (раскодировал шаблон)убрал так называемый «вредоносный код», а php это не html-грешен, нужно подучить.Спасибо за внимание.