Продолжим рассматривать файлы шаблона Wordpress. Сегодня речь пойдет о такой важнейшей детали любого блога, как комментарии. Ибо без них и блог не блог.
За вывод комментариев отвечает файл comments.php. Прицепляется он, как мы уже говорили, к файлу single.php, который выводит отдельно взятый пост на блоге.
По сути, лента комментариев на блоге в чем-то схожа с лентой самих же постов. Только посты идут от нового к старым, если смотреть сверху вниз, а комментарии наоборот — вверху самые старые, а внизу свежие. Напрашивается вывод: стало быть, комменты тоже выводятся при помощи какой-то повторяющейся конструкции вроде лупа (loop) как у постов? Да, почти что так. Но обо всем по порядку.
Комментарии на блоге могут выводиться по-разному. Во-первых, кучно. То есть, если у вас в настройках блога включен прием трэкбэков, то все комменты и трэкбэки будут выводиться одной лентой по мере поступления. Во-вторых, дифференцированно. То есть, комменты отдельно, трэкбэки отдельно. В-третьих, можно для разнообразия оформить комменты поочередно с различным фоном для лучшего восприятия. Ну и, в-четвертых, можно как-то заметнее выделить комменты автора блога, а все остальные пусть будут одинаковые. Вот все эти четыре варианта мы сегодня и рассмотрим.
Поехали!
Файл comments.php состоит из двух основных частей: нумерованного списка, выводящего все комментарии поочередно, и формы для добавления оных. Сегодня разберем вывод комментов.
Как я уже и говорил, комменты можно выводить по разному.
Первый вариант (по-умолчанию) выводит все поступающие комменты одной лентой, независимо коммент это или трэкбэк. Код выглядит следующим образом:
<ol>
<?php foreach ($comments as $comment) : ? >
<li <?php echo $oddcomment; ? >id="comment-<?php comment_ID() ? >" >
<?php comment_author_link() ? >:
<?php if ($comment->comment_approved == '0') : ? >
<em>Ваш комментарий ожидает модерации</em>
<?php endif; ? >
<br />
<a href="#comment-<?php comment_ID() ? >" title=""><?php comment_date('d.m.Y') ? > в <?php comment_time('H:i') ? > </a> <?php edit_comment_link('Редактировать','',''); ? >
<?php comment_text() ? >
</li>
<?php
if('alt' == $oddcomment) {$oddcomment="";}
else { $oddcomment='alt'; }
? >
<?php endforeach; ? >
</ol>
Код приведен в сокращенном виде, без текстовых пометок и привязок к стилям. Что нас тут интересует больше всего?
1. <?php comment_author_link() ? > — выводит имя автора комментария со ссылкой на его сайт, если он его указал.
2. <em>Ваш комментарий ожидает модерации</em> — если комментатор впервые на блоге, то после отправки своего первого коммента он увидит именно эту надпись.
3. <a href=”#comment-<?php comment_ID() ? >” title=”"><?php comment_date(’d.m.Y’) ? > в <?php comment_time(’H:i’) ? > </a> — у каждого комментария есть собственный ID и ссылка-метка. В данном случае эта ссылка оформлена как дата комментария. Это нужно, чтобы любой другой комментатор или автор мог сослаться на данный коммент. Про дату и время (их php-коды) мы уже говорили в теме про файл index.php
4. <?php edit_comment_link(’Редактировать’,”,”); ? > — очень удобная фишка. Можно отредактировать коммент прямо из поста, не переходя в раздел комментариев в админской.
5. <?php comment_text() ? > — непосредственно текст комментария
Второй вариант. По умолчанию трэкбэки выводятся вперемешку с другими комментариями и выглядят, мягко говоря, не очень симпатично:
Каким-то чудом я, Билли Гейтц пишу про…
[…] Бла-бла-бла… На блоге Тынц-Тынц автор пишет, что у него запас золота иссяк и гр… […]
Намного лучше выводить трэкбэки отдельно. Например, в конце всех остальных комментов, и оформить их вменяемыми ссылками. Для этого нужно видоизменить код вывода комментариев следующим образом:
<ol>
<?php foreach ($comments as $comment) : ? >
<?php $comment_type = get_comment_type(); ? >
<?php if($comment_type == 'comment') { ? >
<li class="<?php echo $oddcomment; ? >" id="comment-<?php comment_ID() ? >" > <?php comment_author_link() ? >
<?php if ($comment->comment_approved == '0') : ? >
<em>Ваш комментарий ожидает модерации. </em>
<?php endif; ? >
<br />
<?php comment_text() ? >
</li>
<?php
if('alt' == $oddcomment) {$oddcomment="";}
else { $oddcomment='alt'; }
? >
<?php } else { $trackback = true; } ? >
<?php endforeach; ? >
</ol>
<h3>Трэкбеки</h3>
<ul>
<?php foreach ($comments as $comment) : ? >
<?php $comment_type = get_comment_type(); ? >
<?php if($comment_type != 'comment') { ? >
<li> <?php comment_author_link() ? > </li>
<?php } ? >
<?php endforeach; ? >
</ul>
Как видим, здесь уже присутствуют два списка: нумерованный (ol), выводящий только комментарии, и маркированный (ul), выводящий трэкбэки. Разделение сделано достаточно просто: в код добавлена функция get_comment_type. В первом случае она говорит “выводим только комменты” — <?php if($comment_type == ‘comment’) { ? >
А во втором случае “выводим только НЕ комменты” — <?php if($comment_type != ‘comment’) { ? > Знак восклицания (!) здесь как раз для указания обратного действия.
Третий вариант. Оформляем поочередно комменты разными стилями. Для этого сначала перед тэгом списка <li> добавим следующий код:
<?php $i++;
($i % 2 == 1) ? $bg_comment = 'class_comment1' : $bg_comment = 'class_comment2';
? >
Далее пишем так:
<li id="comment-<?php comment_ID() ? >" class="<?php echo $bg_comment; ? >" >
<?php comment_author_link() ? >
<a href="#comment-<?php comment_ID() ? >" title=""><?php comment_date('d.m.Y') ? > в <?php comment_time('H:i') ? > </a> <?php edit_comment_link('Редактировать','',''); ? >
<?php comment_text() ? >
</li>
Теперь останется только в листе стилей прописать два разных стиля, соответственно class_comment1 и class_comment2. Например, можно задать им разный фон.
Четвертый вариант. Иногда имеет смысл выделить комментарий автора блога, чтобы он отличался от других. Самый простой способ — писать комменты от имени админа. Тогда по-умолчанию имя автора будет записано простым текстом (не ссылкой) и выглядеть как слово admin.
Правильные блоггеры не оставляют такую безличную кличку и пишут от имени себя любимого, добавившись в список рулевых блога как автор (редактор и т.п.) Соответственно, можно это свое имя использовать для настройки вывода комментариев. Делаем вот что:
<li class="<?php echo $oddcomment; ? >" id="comment-<?php comment_ID() ? >" <?php if ($comment->comment_author == "Вася Хитрый") echo "style='background-color:#e9f9fe; color: #000;'"; ?> >
Это так называемый “местный стиль”, внедренный непосредственно в код файла comments.php. И пусть это не совсем корректно по отношению к валидации, но зато самый простой и, надо заметить, рабочий код. Здесь все просто: когда при написании коммента добавляется имя автора Вася Хитрый, то код срабатывает автоматически и подставляет этот местный стиль.
Есть, конечно же, и другие варианты и даже какой-то плагин. Но этот способ самый простой.
В следующий раз поговорим о форме для комментирования.





По поводу 4 варианта: если используется классическая (из шаблона default) верстка комментариев, то достаточно прописать стили для класса comment-author-admin
Как раз занимаюсь созданием мобильной темы для WP, пригодится. Спасибо
Благодарю за разбор внутренностей. Верстаю шаблон для ВП и именно на комментариях немного приостановился. ;)
extezy, вэлкам!
Как раз возникли проблемы одном из вп-блогов. Ваша статья помогла решить проблему .Спасибо.