WordPress: как отметить комментарии подписанного посетителя

16 июля 2012. Рубрики: Рабочие заметки; автор — Юлия Панина aka Княгиня.

Дополнение к заметке как быстро отличить подписанного комментатора. Я полагала, что способ выделить комментарии подписанных пользователей давно известен, но оказалось, что «давно» не означает «широко». Пришлось добавить такую шпаргалку, что всё было вместе и далеко ходить требовалось. Шпаргалка требует знания 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)'),'&nbsp;&nbsp;','') ?>
        </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: как отметить комментарии подписанного посетителя»
  1. Andrey

    Спасибо большое) Пригодилось, только с настройкой стилей помучался… А так вообщем-то доволен!

    P.S.: Вот блог пока на uCoz, как раз на денвере подготавливаю wp для переноса

    Ответить на этот комментарий
    • dim3ka (1 комментарий)

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

      Ответить на этот комментарий
      • Княгиня (650 комментариев)

        Css нужен не только для «красиво оформить» — без него даже простейшая визуальная размётка невозможна. И вообще сайт должен быть не «красивым», а функциональным (и для этого-то и надо использовать css).

        Dle, насколько я помню, в бесплатной версии имеет урезанные возможности. ВП в этом смысле никак не ограничен.

        Ответить на этот комментарий
  2. Postrk (1 комментарий)

    Вот оно что, весьма полезно. Поставилось сразу, как влитое. Давно искал такой способ, но никак не мог найти.

    Ответить на этот комментарий
  3. Антон (3 комментария)

    Хм… Смысла особого не вижу. Тем не менее, если это вдруг кому-то и нужно, неужели нет готового плагина? Кстати, может быть вы его и напишите?

    Ответить на этот комментарий
    • Юлия Панина aka Княгиня (650 комментариев)

      Не напишу. Способ, кстати, давно известный, им пользуются многие известные блоггеры — dimox, например.

      Ответить на этот комментарий
  4. Галина (1 комментарий)

    Все здорово, но я почему-то не нашла функцию wp_list_comments()в файле comments.php
    Такое может быть? А чем тогда выводятся комментарии?

    Ответить на этот комментарий
    • Юлия Панина aka Княгиня (650 комментариев)

      Заочно трудно советовать. Вы не нашли саму функцию или её вызов? Вызов надо искать в виде строки «wp_list_comments» — без скобок. Если в comments.php её совсем нет, можно попробовать поискать в single.php, если он имеется.

      Ответить на этот комментарий
  5. Тимур (5 комментариев)

    Огромное спасибо. Все получилось. Правда, я реализовал эту функцию уже на другом проекте, т.к. лень было переделывать. Зато на новом сайте сделал все с нуля и получилось просто отлично. Еще раз бАлшое спасибо)))

    Ответить на этот комментарий
  6. Леся (1 комментарий)

    =) Спасибо за полезную информацию! ;)

    Ответить на этот комментарий
  7. Александр (9 комментариев)

    Моя тема(АКАДЕМИЯ) не хочет работать с таким подселением,это уже не первый случай когда я её хочу подкорректировать

    Ответить на этот комментарий
    • Княгиня (650 комментариев)

      Такое «подселение» можно сделать в любой теме. Просто некоторые темы требуют индивидуального подхода. Кроме того (поскольку я не знаю, насколько вы разбираетесь в php), имеет смысл проверить пунктуацию. Может быть, вы в functions.php угловые скобки ставите не вовремя?

      Ответить на этот комментарий
      • Александр (9 комментариев)

        Это стало после того как я (раскодировал шаблон)убрал так называемый «вредоносный код», а php это не html-грешен, нужно подучить.Спасибо за внимание.

        Ответить на этот комментарий

Есть что сказать? Не молчим!

Используйте теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" code=""> <ul> <li> <ol> .

Комментарии короче 200 символов публикуются без активной ссылки. Пробелы не учитываются.

Ссылки с комментариев dofollow. Ознакомьтесь, пожалуйста, с правилами dofollow-комментирования. Кто не читает, тот сам себе враг.