Последние комментарии WordPress — тексты комментариев в сайдбаре

В WordPress есть виджет «последние комментарии», но вот информативность его оставляет желать лучшего. К примеру, опубликовали вы новый пост, его 10 человек прокомментировали, и в сайдбаре у вас будет скучный список: «Аня, Вася, Зоя в ответ на ... то же самое». Куда это годится? Я же предлагаю публиковать последние комментарии с выдержками из их текста и аватарами авторов. Пример вы можете видеть в моём сайдбаре.

Предлагаемый способ не предполагает использование дополнительных плагинов. Но потребуются лишь небольшие изменения, которые необходимо будет сделать в редакторе темы. Всё просто и понятно.

В первую очередь, этот код:

function pavluha_recent_comments() {
    $comment_len = 100;
    $comment_k = 10;
    $comment_more = ' [...]';
    $comment_avatar_size = 35;
    $comments = get_comments('number='.$comment_k.'&status=approve');
    if ($comments) {
?>
<ul class="rec_comments">
<?
        foreach ($comments as $comment) {
?>
<li>
<?php echo get_avatar($comment,$comment_avatar_size); ?>
<a href="<?php echo get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; ?>"><?php echo $comment->comment_author; ?></a>:
<?= mb_strimwidth(strip_tags(apply_filters('get_comment_text', $comment->comment_content)), 0, $comment_len+strlen($comment_more), $comment_more); ?>
</li>
<?php
        }
?>
</ul>
<?
    }
}

Нужно вставить в файл function.php (в админке «Внешний вид» — «Редактор» — «Функции темы (function.php)»). Можно вставить в самом начале после строчки <?php.

Тут некоторые настройки можете изменить на свой вкус:

  • 2 строка — максимальная длина текста комментария, комментарий большей длины будет усечён. Здесь максимальная длина — 100 символов;
  • 3 строка — сколько комментариев отображать. Здесь 10;
  • 4 строка — что добавлять к тексту комментария, если он усекается. Здесь добавится [...] — если будете менять, будьте внимательны с кавычками;
  • 5 строка — размер аватара. Здесь 35×35 пикселей.

Следующее изменение. Редактируем файл sidebar.php («Боковая колонка» или «Сайдбар»). Да, в том же Редакторе. В нужном месте следует вставить код:

<h3 class="widget-title">Блогеры пишут</h3>
<? pavluha_recent_comments(); ?>

Нужное место ищем опытным путём.

Затем нужно лишь настроить стиль оформления последних комментариев WordPress. Для этого редактируем файл style.css («Список стилей»). В конце этого файла нужно добавить такие строки:

.rec_comments li {
	padding: 5px 0px;
	clear: right;
}
.rec_comments img {
	float: right;
	margin: 5px 0px 5px 5px;
}

Если хотите, чтобы аватарки последних комментариев были выравнены по левому краю, то в обоих местах замените right на left. И наслаждайтесь. ;)

Скажу честно, не весь код писал сам. И не помню, где взял начальный вариант. Но внёс туда существенные изменения: сделал вывод только одобренных комментариев, упростил настройку и т.д.

Запись опубликована в рубрике Web-мастеринг с метками , . Короткая ссылка для добавления в закладки: Последние комментарии WordPress — тексты комментариев в сайдбаре.

56 Responses

  1. zusicks438 говорит:

    Вот спасибо хорошо :) Надо поставить себе такой код, кстати на hyperseo он по-моему даже лучше смотрится)

    • Pavluha.Net говорит:

      Так я на Hyperseo час, наверное, со стилями колдовал. А тут оставил дефолтно почти всё — лишь бы только читалось, не смещалось и не наезжало

  2. Надюша говорит:

    Любимый, ты крут! Поставлю и себе такие комменты — гораздо круче, нежели стандартные в виджете :)

  3. SwaEgo говорит:

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

  4. Евгений говорит:

    а ошибки в первом коде нет случайно? а то у меня сразу блог не отображаеться. может синтаксис напутан?

    • Pavluha.Net говорит:

      Вряд ли есть ошибка. Код копировал с этого блога. Плюс на www.seo-stories.ru код установлен согласно этой инструкции — работает. Скорее всего, просто не судьба

  5. ABANOUB говорит:

    Выдержки из комментариев не всегда описывают суть комментария. В выдержке может быть и цитата, ведь так?!

    • Pavluha.Net говорит:

      Всё может быть. Жду конструктивных предложений.

      Идея появилась. Может кто знает, как сформулировать такой запрос, чтобы в списке последних комментариев было только по одному последнему комментарию на одну запись. Например, все последние комментарии могут быть написаны к последней записи, но при этом в списке будет только один последний комментарий к последней записи, другие последние комментарии будут взяты из других записей

  6. Lampslave говорит:

    Спасибо за идею, только для определения url ссылки нужно использовать get_comment_link, потому что конструкция с get_permalink не работает при разбивке комментариев на страницы.

  7. dionus говорит:

    Спасибо, работает. Я немного усовершенствовал вывод комментов, правда убрав вывод аватаров за ненадобностью. Вот список улучшений и код:

    1. Добавил горизонтальную полосу разделитель

    2. Добавил вывод названия записи, к которой дается комментарий.

    3. Ссылку сделал на сам текст комментария, поому как тогда легче на нее попасть мышкой. Имя автора сделал курсивом без ссылки.

    function txtstyle_recent_comments() { $comment_len = 100; $comment_k = 10; $comment_more = ' [...]'; $comments = get_comments('number='.$comment_k.'&status=approve'); if ($comments) { ?> <B>comment_post_ID)->post_title; ?></B> <I>comment_author; ?> </I>: <a href="comment_post_ID ) . '#comment-' . $comment->comment_ID; ?>"> comment_content)), 0, $comment_len+strlen($comment_more), $comment_more); ?></a> <? } }

  8. Сергей говорит:

    Спасибо! Быстро настроил и вывел комментарии на боковую панель, а то виджет от wordpress не вписывался в тему.

  9. Юрий говорит:

    Вот спасибо! Только вписал в Яндекс «wordpress последние комментарии» и сразу сюда попал. Ничего исправлять не пришлось, все сразу стало даже на мою капризную тему, съезжающую при малейшем неосторожном движении. Карты сайта здесь не нашел, жалко.

  10. Игорь говорит:

    Интересно... завтра займусь этим, попробую... Комменты здесь действительно выглядят привлекательно.

  11. Спасибо Вам большое.

    У меня тоже получилось вставить Ваш код в блог :)

    Успехов!

  12. Игорь говорит:

    У меня только сейчас руки дотянулись до этого. Всё сделал по инструкции, но изменений не было, пока не догадался отключить Вордпрессовский виджет комментариев. Большущее спасибо!

  13. Сергей говорит:

    Добрый день, спасибо за код, но не могли бы вы подсказать как сделать, что бы сначала выводился автор комментария(ссылка на его запись), на следующей строке текст самого комментария, и на последней строке название записи(ссылка на сам комментарий).

  14. Олег говорит:

    Ё маё нипонимаю, почему не отображается в сайдбаре? как подключить эти комменты?

  15. Юрий говорит:

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

    • Pavluha.Net говорит:

      Юрий, у функции get_comments () есть параметр $post_id (число): ID поста/страницы. Если указать этот параметр, то функция вернет только комментарии к указанному посту или странице.

  16. Виктор говорит:

    Здравствуйте! Подскажите, как заменить аватарку автора комментария на миниатюру поста, на которой он расположен? Как я понимаю, нужно узнать ID поста по значению $comments.

    • Pavluha.Net говорит:

      Вот так:

      $thumbnail_id = get_metadata('post', $post->ID, '_thumbnail_id', true); if ($thumbnail_id) { $thumb_data = get_metadata('post', $thumbnail_id); $t['alt'] = $thumb_data['_wp_attachment_image_alt'][0]; $t['src'] = wp_get_attachment_thumb_url($thumbnail_id); } else { /* Нет тумбинашки у поста */ $t = array('src'=>'http://ваш-сайт/стандартная-картинка.jpg', 'alt'=>''); } echo '<img src="'.$t['src'].'" alt="'.$t['alt'].'">';

      Только имейте ввиду, что всё это PHP-код, который должен вызываться внутри цикла WP. А то спрашивают иногда и сами не знают, что предполагает ответ.

      • Виктор говорит:

        Спасибо, но для вывода миниатюр я использую сторонний метод, в котором нужно указать именно ID статьи. Как в вашем цикле можно его получить?

        <img src="" align=left>

        • Pavluha.Net говорит:

          Да, с кодом в комментариях тут пока проблемка. Я понял, что имеется ввиду, попробуй &post_id={$post->ID}

          • Виктор говорит:

            Не получается, появляется иконка текущей статьи (т.е. все иконки одинаковые во всех комментариях). Код ниже на скрине, подсвеченная строка — проблемная.

            funkyimg.com/u2/4804/903/...13-07-22_001.png

          • Pavluha.Net говорит:

            Понял. Да, в этом случае будет не {$post->ID}, а {$comment->comment_post_ID}

          • Виктор говорит:

            Спасибо, {$comment->comment_post_ID}это то что нужно!

  17. Марина говорит:

    У меня на сайте вордпресс какой-то глюк, что ли. В общем в комментах текст практически невидим, только бледная, нечитабельная тень от текста, так же и поля ввода инфы о комментаторе. В чём может быть проблема?

  18. Регина говорит:

    Спасибо! Только у Вас нашла то что нужно!

  19. Сергей говорит:

    Обязательно поставлю, а то как то скучновато без этого выглядит сайт. Спасибо вам!

  20. Алексей говорит:

    А я в какое место не вставляю второй код, всегда пишет синтаксическую ошибку. Вставляю в файл sidebar.php Но безуспешно. Подскажите в чем проблема?) Может куда то ещё его можно вставить.

  21. Сергей говорит:

    Павел когда ставлю код в файл в function.php сразу пропадает сайт. Подскажите пожалуйста в чем проблема?

    • Павлуха говорит:

      Алексей, Сергей, я отвечаю только за то, что в самом коде, опубликованном в посте, нет синтаксических ошибок. Но если у вас пропадает сайт, то вы не правильно вставляете код или сохраняете файл в неверной кодировке (нужно UTF-8 без BOM)

  22. Алексей говорит:

    Не могу отписаться от комментов к этой записи. Нажимаю «Отписаться», потом ставлю галочку около этого поста и получаю Forbidden. Отпишите, плз.

    • Павлуха говорит:

      Алексей, извини за причинённые неудобства. Кое-что поправил в настройке сервера, теперь должен разрешить отписаться. Не нашёл, кстати, твоего адреса в списке подписок.

  23. Алексей говорит:

    Вот такой адрес подписан [адрес скрыт]

    • Павлуха говорит:

      Тоже не найден. Возможно, вы уже отписались от комментариев сами, тогда вы не должны получить этот комментарий в письме. :)

  24. Марина говорит:

    Спасибо большое, все отлично работает!

  25. Александр говорит:

    А можно ли как то сюда прикрутить скроллинг, что было фиксированное окошко, там список последних комментариев, и это окошко можно было прокручивать вниз-вверх?

    И можно ли как то сюда добавить последние комментарии добавленные людьми из вк?

    • Павлуха говорит:

      1) Можно. Для этого надо блоку с комментариями (в примере в статье — ul.rec_comments) в CSS прописать свойство height (или max-height) с указанием фиксированного значения высоты (или максимальной высоты, при превышении которой появится скролл), и ещё свойство overflow: auto

      2) Комментарии ВКонтакте можно добавить только соседним блоком. В этой статье я писал, как вставить виджет комментариев ВКонтакте

      • Александр говорит:

        Добавляю в style.css

        .rec_comments{max-height: 200px; overflow: auto; }

        и ничего не появляется.

        Так же у меня изменены свойства в style.css .rec_comments img .rec_comments a .rec_comments

      • Павлуха говорит:

        Добавил у себя на этом блоге стили: .rec_comments { max-height: 200px; overflow: auto; }

        Полосы прокрутки появились. Проверил в Firefox, IE 10, 9, 8, Google Chrome, Opera — везде работает. Так что, ищите причину в своём файле стилей. Возможно, где-то ошибка синтаксиса, или стили переназначаются в дальнейшем, или заданный ранее стиль наследуется и отменяет заданный позднее, или браузер загрузил style.css из кэша...

        Искать баги в CSS мне помогает Firebug для Firefox

  26. Александр говорит:

    Всё спасибо, разобрался) оказалось, что я функцию по другому назвал)

  27. Олег Клышко говорит:

    У меня блог слетел, после того как код поставил. Несколько раз пробовал место виджетов коды поставить ничего не получается

  28. Владислав Олерских говорит:

    В моем случае уже после вставки кода в файл functions.php сайт полностью перестал грузиться...

    • Павлуха говорит:

      Я не удивлён, учитывая то, что вы не смогли даже адрес вашего сайта корректно написать в подписи комментария. В любом случае, каждый должен иметь ввиду, что правки в файлах php делаются на свой страх и риск. Если не уверены в себе — используйте плагины из официального репозитория WP

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Иногда ваш комментарий может не отобразиться сразу после публикации - будто пропал. Не волнуйтесь, он не пропадёт и появится потом, после моего одобрения.