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

wplogo.gifПродолжим рассматривать файлы шаблона 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. И пусть это не совсем корректно по отношению к валидации, но зато самый простой и, надо заметить, рабочий код. Здесь все просто: когда при написании коммента добавляется имя автора Вася Хитрый, то код срабатывает автоматически и подставляет этот местный стиль.

Есть, конечно же, и другие варианты и даже какой-то плагин. Но этот способ самый простой.

В следующий раз поговорим о форме для комментирования.

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

04.06.2010

Автор: Игорь Квентор
www.websovet.com

Если статья оказалась для вас полезной, пожалуйста, поставьте свою оценку и поделитесь в соцсетях:

1 Star2 Stars3 Stars4 Stars5 Stars (Вы еще не оценили)
Загрузка...

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

Подпишитесь на рассылку блога Вебсовет, чтобы первыми получать самые интересные материалы:

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