Отображение последних комментариев на сайте WordPress — популярная задача для повышения вовлеченности пользователей и улучшения взаимодействия с контентом. Однако вывод всех комментариев на одной странице может замедлить загрузку сайта, особенно если их очень много. В этой статье разберем, как реализовать автоматическое отображение последних комментариев с динамической подгрузкой (ленивой загрузкой, lazy load) через AJAX, чтобы повысить скорость и удобство.
Зачем нужна подгрузка последних комментариев в WordPress
Если просто вывести все последние комментарии на странице с помощью стандартного виджета или функции, при большом количестве комментариев замедлится загрузка страницы, увеличится объем передаваемых данных и нагрузка на сервер. Это негативно скажется на производительности и опыте пользователей.
Подгрузка комментариев по мере прокрутки или по кнопке «Показать ещё» позволяет:
- Значительно сократить первоначальный объем загружаемых данных.
- Сделать интерфейс более отзывчивым и современным.
- Обеспечить удобный просмотр всех комментариев без перезагрузки страницы.
Такой подход особенно актуален для сайтов с активной аудиторией и большим количеством комментариев.
Как вывести последние комментарии в WordPress: базовый пример
Для начала рассмотрим, как получить последние комментарии программно. В WordPress есть функция get_comments(), которая позволяет запросить комментарии с разными параметрами.
function wpkit_get_latest_comments($number = 5) {
return get_comments(array(
'number' => $number,
'status' => 'approve',
'post_status' => 'publish',
'orderby' => 'comment_date_gmt',
'order' => 'DESC'
));
}
Этот код вернёт последние 5 одобренных комментариев к опубликованным постам. Далее их можно вывести в шаблоне:
$comments = wpkit_get_latest_comments(5);
echo '<ul class="wpkit-latest-comments">';
foreach ($comments as $comment) {
echo '<li><strong>' . esc_html($comment->comment_author) . '</strong>: ' . esc_html(wp_trim_words($comment->comment_content, 15)) . '</li>';
}
echo '</ul>';
Реализация AJAX-подгрузки последних комментариев
Добавляем обработчик AJAX в functions.php
Чтобы динамически подгружать комментарии без перезагрузки страницы, создадим AJAX-обработчик WordPress. Он будет возвращать следующий блок комментариев по запросу.
add_action('wp_ajax_wpkit_load_comments', 'wpkit_load_comments_ajax');
add_action('wp_ajax_nopriv_wpkit_load_comments', 'wpkit_load_comments_ajax');
function wpkit_load_comments_ajax() {
$offset = isset($_POST['offset']) ? intval($_POST['offset']) : 0;
$number = 5; // Кол-во комментариев за один запрос
$comments = get_comments(array(
'number' => $number,
'offset' => $offset,
'status' => 'approve',
'post_status' => 'publish',
'orderby' => 'comment_date_gmt',
'order' => 'DESC'
));
if (empty($comments)) {
wp_send_json_error('No more comments');
}
ob_start();
echo '<ul class="wpkit-latest-comments">';
foreach ($comments as $comment) {
echo '<li><strong>' . esc_html($comment->comment_author) . '</strong>: ' . esc_html(wp_trim_words($comment->comment_content, 15)) . '</li>';
}
echo '</ul>';
$html = ob_get_clean();
wp_send_json_success(array('html' => $html));
}
Подключаем JavaScript для подгрузки
Теперь создадим скрипт, который будет отправлять AJAX-запросы и добавлять новые комментарии на страницу. Подключите его в теме или плагине.
function wpkit_enqueue_scripts() {
wp_enqueue_script('wpkit-lazy-comments', get_template_directory_uri() . '/js/wpkit-lazy-comments.js', array('jquery'), null, true);
wp_localize_script('wpkit-lazy-comments', 'wpkit_ajax', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wpkit_lazy_comments_nonce'),
));
}
add_action('wp_enqueue_scripts', 'wpkit_enqueue_scripts');
Содержимое файла js/wpkit-lazy-comments.js
jQuery(document).ready(function($) {
var offset = 5;
var loading = false;
$('#load-more-comments').on('click', function() {
if (loading) return;
loading = true;
$.ajax({
url: wpkit_ajax.ajax_url,
method: 'POST',
data: {
action: 'wpkit_load_comments',
offset: offset,
_ajax_nonce: wpkit_ajax.nonce
},
success: function(response) {
if (response.success) {
$('.wpkit-latest-comments').append(response.data.html.replace('<ul class="wpkit-latest-comments">', '').replace('</ul>', ''));
offset += 5;
loading = false;
} else {
$('#load-more-comments').text('Больше комментариев нет').prop('disabled', true);
}
},
error: function() {
alert('Ошибка загрузки комментариев');
loading = false;
}
});
});
});
Выводим первые комментарии и кнопку подгрузки в шаблоне
В нужном месте вашего шаблона вставьте следующий код:
$comments = wpkit_get_latest_comments(5);
echo '<ul class="wpkit-latest-comments">';
foreach ($comments as $comment) {
echo '<li><strong>' . esc_html($comment->comment_author) . '</strong>: ' . esc_html(wp_trim_words($comment->comment_content, 15)) . '</li>';
}
echo '</ul>';
echo '<button id="load-more-comments">Показать ещё комментарии</button>';
Использование плагинов для расширения функционала
Если не хочется писать код самостоятельно, можно использовать готовые плагины с поддержкой подгрузки комментариев. Например:
- Ajax Load More — мощный плагин для бесконечной подгрузки контента, включая комментарии.
- WP Comment Ajax — простой плагин для AJAX-подгрузки комментариев.
Для интеграции с вашим сайтом и стилистикой иногда полезно доработать их шаблоны или добавить собственный CSS.
Заключение по теме подгрузки комментариев
Подгрузка последних комментариев через AJAX — отличное решение для сайтов на WordPress с большим количеством отзывов и обсуждений. Это повышает скорость загрузки страниц, удобство пользователей и снижает нагрузку на сервер. В статье приведён простой пример реализации с использованием стандартных средств WordPress и jQuery, который можно адаптировать под свои задачи.
Если вы хотите расширить функционал, обратите внимание на плагины Ajax Load More и WP Comment Ajax, а также рассмотрите возможность интеграции с плагинами WPShop, например, для создания отзывов и рейтингов с WPRemark (подробнее).