В этой статье мы расскажем, как выводить свежие комментарии в сайдбаре без необходимости установки плагинов. Показ новых комментариев на боковой панели значительно повысит взаимодействие с вашими посетителями для активного обсуждения контента.
Мы создадим собственный функциональный шорткод, который поможет нам легко и красиво вывести новые комментарии на нашем сайте. Никаких плагинов — только чистый и оптимизированный код для отображения актуальных комментариев прямо в сайдбаре сайта. Для создания собственного шорткода нам потребуется лишь немного кода.
Первым делом откройте файл functions.php и поместите в него наш шорткод.
function wordsmall_comments_shortcode() { ob_start(); $comments = get_comments('status=approve&number=5'); ?> <ul class="ws_wrap_widget_comm"> <?php foreach ($comments as $comment) { ?> <li class="ws_content_widget_comm"> <div class="auther_comm_ava"> <?php $title = get_the_title($comment->comment_post_ID); echo get_avatar( $comment, $size = '35'); echo '<span>' . ($comment->comment_author) . ''; ?> к посту: </span> </div> <div class="ws_text_comm_title"> <a href="<?php echo get_permalink($comment->comment_post_ID); ?>#comment-<?php echo $comment->comment_ID; ?>" title="<?php echo $title; ?>"> <?php echo $title; ?></a> <?php echo '<span class="ws_text_comm">' . '"' . wp_html_excerpt( $comment->comment_content, 75 ) . '.."' .'</span>'; ?> </div> <div class="ws_data_comm_num"> <span class="ws_comm_data"><?php $d = "M d, Y"; $comment_ID = $comment->comment_ID; $comment_date = get_comment_date( $d, $comment_ID ); $comment_PID = $comment->comment_post_ID; echo $comment_date; ?></span> <span class="ws_comm_number"><?php echo 'Комментариев:'.get_comments_number($comment_PID) ?></span> </div> </li> <?php } ?> </ul> <?php return ob_get_clean(); } add_shortcode('ws_recent_comments', 'wordsmall_comments_shortcode');
Параметры функции
('status=approve&number=5');
— Количество комментарий
$size = '35'
— Размер аватарок
$comment->comment_content, 35
— Количество символов сообщения
На следующем этапе мы обеспечим поддержку шорткодов в сайдбаре. Для этого достаточно добавить следующую строку в файл functions.php:
//поддержка шорткода в сайдбаре add_filter('widget_text', 'do_shortcode');
Теперь отправляемся в админку и выбираем раздел «Внешний вид — Виджеты». Затем добавляем новый виджет «HTML-код». В открывшемся окне нам нужно вставить зарегистрированный нами ранее шорткод, который выглядит так: [ws_recent_comments]
.
Приближаемся к финальному этапу. Добавьте стили в файл style.css, и смело можете редактировать их под дизайн своего сайта.
ul.ws_wrap_widget_comm { padding: 0; margin: 0; list-style: none; } ul.ws_wrap_widget_comm br { display: none; } .auther_comm_ava { margin-bottom: 15px; } .auther_comm_ava span { font-weight: 500; } .auther_comm_ava img { border-radius: 50%; vertical-align: middle; display: inline-block; margin-right: 10px; } .ws_text_comm_title a { margin-bottom: 15px; display: inline-block; } .ws_text_comm_title .ws_text_comm { padding: 13px; background: #fff; display: inline-block; font-size: 14px; border-radius: 5px; border: 1px solid #eee; margin-bottom: 15px; } .ws_data_comm_num { margin-bottom: 2rem; } .ws_data_comm_num span { font-size: 14px; color: #777; display: inline-block; } .ws_data_comm_num span.ws_comm_data { margin-right: 10px; }
Старый способ
Сделайте поддержку php в сайдбаре WordPress
Зайдите в админ-панель на вкладку «Внешний вид – Виджеты». Добавьте текстовый виджет и в поле ввода вставьте код:
<?php $comments = get_comments('status=approve&number=5'); ?> <ul class="ws_wrap_widget_comm"> <?php foreach ($comments as $comment) { ?> <li class="ws_content_widget_comm"> <div class="auther_comm_ava"> <?php $title = get_the_title($comment->comment_post_ID); echo get_avatar( $comment, $size = '35'); echo '<span>' . ($comment->comment_author) . ''; ?> к посту: </span> </div> <div class="ws_text_comm_title"> <a href="<?php echo get_permalink($comment->comment_post_ID); ?>#comment-<?php echo $comment->comment_ID; ?>" title="<?php echo $title; ?>"> <?php echo $title; ?></a> <?php echo '<span class="ws_text_comm">' . '"' . wp_html_excerpt( $comment->comment_content, 75 ) . '.."' .'</span>'; ?> </div> <div class="ws_data_comm_num"> <span class="ws_comm_data"><?php $d = "M d, Y"; $comment_ID = $comment->comment_ID; $comment_date = get_comment_date( $d, $comment_ID ); $comment_PID = $comment->comment_post_ID; echo $comment_date; ?></span> <span class="ws_comm_number"><?php echo 'Комментариев:'.get_comments_number($comment_PID) ?></span> </div> </li> <?php } ?> </ul>
Откройте файл style.css и добавьте в него следующие стили:
ul.ws_wrap_widget_comm { padding: 0; margin: 0; list-style: none; } ul.ws_wrap_widget_comm br { display: none; } .auther_comm_ava { margin-bottom: 15px; } .auther_comm_ava span { font-weight: 500; } .auther_comm_ava img { border-radius: 50%; vertical-align: middle; display: inline-block; margin-right: 10px; } .ws_text_comm_title a { margin-bottom: 15px; display: inline-block; } .ws_text_comm_title .ws_text_comm { padding: 13px; background: #fff; display: inline-block; font-size: 14px; border-radius: 5px; border: 1px solid #eee; margin-bottom: 15px; } .ws_data_comm_num { margin-bottom: 2rem; } .ws_data_comm_num span { font-size: 14px; color: #777; display: inline-block; } .ws_data_comm_num span.ws_comm_data { margin-right: 10px; }
Вот и все, стили изменяйте на свое усмотрение.
Спасибо! Ваш способ позволил избежать установки очередного плагина. Из минусов (не критичных, но все же) — заданное число знаков режет слова как взбредет, а хотелось бы «умной» обрезки, т.е. по слову... И второе — по клику попадаешь на статью, а не в область данного комментария. Но, повторюсь, решение отличное, уже пользуюсь.
С наступающим Новым годом! )
Спасибо! Вас так же, С наступающим Новым годом!) Насчет ссылки прям на комментарий, то чуток выше в комментариях я давал код. А то что режет, ничего не поделаешь. Разве что, совсем убрать)
Или так (формат ссылки)
<?php echo get_permalink($comment- rel="nofollow">comment_post_ID); ?>#comment-<?php echo $comment->comment_ID; ?>" rel="external nofollow" title="<?php echo $title; ?>"> <?php echo $title; ?>
Скажите, а зачем в данном случае использовать rel="external nofollow" ? Мы же на собственные статьи ссылаемся.
Привычка. Удалите да и все.
Здравствуйте! что-то у меня только код отображается, а комментарии не отображаются, хотя выбираю «текст» > добавляю в сайдбар и перед вставкой выбираю вкладку «текст» ...ну и сохраняю.
Здравствуйте! Вначале сделайте поддержку php в сайдбаре wordsmall.ru/sajtostroeni...r-wordpress.html
Почему вы сами не используете этот код на своем сайте? У вас аватарки не отображаются...
Используется этот же код, только отредактирован под себя.
Сделал через дочернюю тему!!! Отлично. Даже лучше, чем я думал...
У вам там орфографическая ошибка: «количество комментариев», а не «комментарий»...
Вас вернее
Круто, а можно как нибудь сделать, чтобы выводились последние комментарии из каких то определенных постов, где это указать ?
Попробуйте в функцию get_comments добавить
&post_id=55
WordSmall, А можно синтаксис ? ну то есть как точно параметр &post_id= туда вставить ? а то я вставляю
помоему не правильно что то делаю )))
у меня даже окно с комментами пропадает, не то что что то дополнительное появляется.
<?php $comments = get_comments('status=approve&number=5&post_id=18'); ?>
Число 18 — это идентификатор поста, замените на свой.Сори за глупый вопрос, разобрался.
Все супер, вроде статье уже сколько лет, а ведь актуальна ! 🙂
Еще один вопросик, get_comments ('status=approve&number=5&post_id= (2065, 2049)'); ?>
стали на странице выводиться комменты с двух указанных id постов, а еще комменты со страницы на которой виджет с кодом размещен, это лечится ? 🙂
Думаю, срок не имеет значение, главное, чтоб код был рабочий. И я не совсем понял суть проблемы. То есть выводит еще комментарии страницы? Тогда замените
post_id
наpost__in
. А если виджета с комментариями не должно быть на страницах, тогда придется выводить через файл темы, обернув в условие.