Конструктивные элементы шаблона WordPress | Файл comments.php | Вывод комментариев
Продолжаем рассматривать файлы шаблона WordPress. Сегодня речь пойдет о такой важнейшей детали любого блога, как комментарии. Ибо без них и блог не блог.
За вывод комментариев отвечает файл comments.php. Прицепляется он, как мы уже говорили, к файлу single.php, который выводит отдельно взятый пост на блоге.
По сути, лента комментариев на блоге в чем-то схожа с лентой самих же постов. Только посты идут от нового к старым, если смотреть сверху вниз, а комментарии наоборот — вверху самые старые, а внизу свежие.
Напрашивается вывод: стало быть, комменты тоже выводятся при помощи какой-то повторяющейся конструкции вроде лупа (loop) как у постов? Да, почти что так. Но обо всем по порядку.
Вывод комментариев на WordPress
Комментарии на блоге могут выводиться по-разному.
Во-первых, кучно. То есть, если у вас в настройках блога включен прием трэкбэков (трэкбэк — уведомление с чужого сайта, поставившего ссылку на ваш пост), то все комменты и трэкбэки будут выводиться одной лентой по мере поступления.
Во-вторых, дифференцированно. То есть, комменты отдельно, трэкбэки отдельно.
В-третьих, можно для разнообразия оформить комменты поочередно с различным фоном для лучшего восприятия.
Ну и, в-четвертых, можно как-то заметнее выделить комменты автора блога, а все остальные пусть будут одинаковые.
Вот все эти четыре варианта мы сегодня и рассмотрим.
Поехали!
Файл comments.php состоит из двух основных частей: нумерованного списка, выводящего все комментарии поочередно, и формы для добавления оных. Сегодня разберем вывод комментов.
Как я уже и говорил, комменты можно выводить по разному.
1 вариант вывода комментариев
Первый вариант (по-умолчанию) выводит все поступающие комменты одной лентой, независимо коммент это или трэкбэк. Код выглядит следующим образом:
<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() ?> — непосредственно текст комментария
2 вариант вывода комментариев
По умолчанию трэкбэки выводятся вперемешку с другими комментариями и выглядят, мягко говоря, не очень симпатично:
Каким-то чудом я, Билли Гейтц пишу про…
[…] Бла-бла-бла… На блоге Тынц-Тынц автор пишет, что у него запас золота иссяк и гр… […]
Намного лучше выводить трэкбэки отдельно. Например, в конце всех остальных комментов, и оформить их вменяемыми ссылками. Для этого нужно видоизменить код вывода комментариев следующим образом:
<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') { ?> Знак != здесь как раз для указания обратного действия (изучайте JavaScript!).
3 вариант вывода комментариев
Оформляем поочередно комменты разными стилями. Для этого сначала перед тэгом списка <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. Например, можно задать им разный фон.
4 вариант вывода комментариев
Иногда имеет смысл выделить комментарий автора блога, чтобы он отличался от других. Самый простой способ — писать комменты от имени админа. Тогда по-умолчанию имя автора будет записано простым текстом (не ссылкой) и выглядеть как слово 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. И пусть это не совсем корректно по отношению к валидации, но зато самый простой и, надо заметить, рабочий код.
Здесь все просто: когда при написании коммента добавляется имя автора Вася Хитрый, то код срабатывает автоматически и подставляет этот местный стиль.
Есть, конечно же, и другие варианты и даже какой-то плагин. Но этот способ самый простой.
В следующий раз поговорим о форме для комментирования.
Удачи!
Конструктивные элементы шаблона WordPress | Файл header.php
Конструктивные элементы шаблона WordPress | Файл index.php | Часть 1
Конструктивные элементы шаблона WordPress | Файл index.php | Часть 2
Конструктивные элементы шаблона WordPress | Файл single.php
Конструктивные элементы шаблона WordPress | Файл comments.php | Вывод комментариев
Конструктивные элементы шаблона WordPress | Файл comments.php | Форма комментирования
Конструктивные элементы шаблона WordPress | Файл sidebar.php
Конструктивные элементы шаблона WordPress | Файл footer.php
Конструктивные элементы шаблона WordPress | Файл 404.php