Динамическая пагинация — это отличный способ улучшить пользовательский опыт на сайте WordPress, позволяя загружать новые записи без перезагрузки страницы. Это особенно полезно для блогов, каталогов и магазинов, где много контента, и хочется сделать навигацию максимально плавной и современной.
Почему стоит использовать AJAX для пагинации в WordPress
Традиционная пагинация требует полной перезагрузки страницы, что замедляет работу сайта и может раздражать пользователей. AJAX позволяет подгружать новые данные в фоне и обновлять только нужный участок страницы. Это значительно ускоряет взаимодействие и снижает нагрузку на сервер.
Кроме того, динамическая пагинация помогает сохранить контекст и состояние страницы, что положительно сказывается на SEO и удобстве пользователей.
Основные шаги создания динамической пагинации с AJAX
Реализация состоит из нескольких этапов:
- Создание функции для вывода постов с поддержкой пагинации.
- Добавление обработчика AJAX в functions.php.
- Написание JavaScript для отправки запросов и обновления контента без перезагрузки.
Давайте рассмотрим каждый шаг подробнее.
1. Создание функции вывода постов с пагинацией
Для начала создадим функцию wptour_get_posts_ajax, которая будет брать номер страницы и возвращать HTML с постами.
function wptour_get_posts_ajax($paged = 1) {
$args = [
'post_type' => 'post',
'posts_per_page' => 5,
'paged' => $paged
];
$query = new WP_Query($args);
if($query->have_posts()) {
ob_start();
echo '<div class="wptour-post-list">';
while($query->have_posts()) {
$query->the_post();
echo '<article class="wptour-post">';
echo '<h2>' . get_the_title() . '</h2>';
echo '<div>' . get_the_excerpt() . '</div>';
echo '</article>';
}
echo '</div>';
wp_reset_postdata();
return ob_get_clean();
} else {
return '<p>Посты не найдены.</p>';
}
}2. Добавление обработчиков AJAX в functions.php
Теперь нам нужно создать AJAX обработчики для авторизованных и неавторизованных пользователей. Они будут принимать параметр paged и возвращать сформированный HTML.
add_action('wp_ajax_wptour_load_posts', 'wptour_ajax_load_posts');
add_action('wp_ajax_nopriv_wptour_load_posts', 'wptour_ajax_load_posts');
function wptour_ajax_load_posts() {
$paged = isset($_POST['paged']) ? intval($_POST['paged']) : 1;
$response = wptour_get_posts_ajax($paged);
echo $response;
wp_die();
}3. Подключение скрипта и написание JavaScript для AJAX запросов
Подключим скрипт в functions.php, локализуем параметры для AJAX:
function wptour_enqueue_scripts() {
wp_enqueue_script('wptour-ajax-pagination', get_template_directory_uri() . '/js/wptour-ajax-pagination.js', ['jquery'], null, true);
wp_localize_script('wptour-ajax-pagination', 'wptour_ajax_obj', [
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wptour_ajax_nonce')
]);
}
add_action('wp_enqueue_scripts', 'wptour_enqueue_scripts');В файле wptour-ajax-pagination.js реализуем логику подгрузки новых постов:
jQuery(document).ready(function($) {
var paged = 1;
$('#wptour-load-more').on('click', function(e) {
e.preventDefault();
paged++;
$.ajax({
url: wptour_ajax_obj.ajaxurl,
type: 'POST',
data: {
action: 'wptour_load_posts',
paged: paged,
_ajax_nonce: wptour_ajax_obj.nonce
},
success: function(response) {
if(response.trim()) {
$('.wptour-post-list').append(response);
} else {
$('#wptour-load-more').hide(); // Скрываем кнопку, если постов больше нет
}
}
});
});
});Советы по улучшению и плагинам для динамической пагинации
Если хочется использовать готовые решения с более расширенным функционалом, можно обратить внимание на плагины:
- Ajax Load More — мощный плагин для бесконечной прокрутки и AJAX пагинации.
- ABC Pagination — простой в настройке и с поддержкой AJAX.
Для повышения производительности стоит кэшировать результаты AJAX запросов, например, с помощью Clearfy Pro, который умеет оптимизировать работу сайта и плагинов.
Отладка и распространённые ошибки при создании динамической пагинации
При реализации пагинации AJAX часто возникают следующие проблемы:
- Неправильная передача номера страницы
paged— важно корректно увеличивать переменную и передавать в запрос. - Отсутствие поддержки неавторизованных пользователей — обязательно нужно регистрировать обработчик с префиксом
nopriv. - Проблемы с JavaScript — ошибки в консоли могут прерывать выполнение, стоит использовать отладчик и проверять правильность селекторов.
- Дублирование контента — при добавлении новых записей нужно не перезаписывать, а дописывать в контейнер.
Также учитывайте, что при использовании SEO-плагинов или кэширования нужно правильно настроить исключения для AJAX-запросов.
Итог
Создание собственной динамической пагинации с AJAX в WordPress — задача вполне выполнимая и улучшает юзабилити сайта. Приведённый пример легко адаптировать под любые кастомные типы записей и дизайн. Если хочется сэкономить время, можно использовать качественные плагины, но собственный код даёт полный контроль и гибкость.