Конструктивные элементы шаблона WordPress | Файл comments.php | Вывод комментариев

Конструктивные элементы шаблона 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

Похожие записи:

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