В современных темах и плагинах для WordPress часто используется AJAX пагинация для динамической подгрузки контента без перезагрузки страницы. Это удобно для пользователей, но иногда возникают ситуации, когда нужно отключить AJAX пагинацию и вернуть классическую постраничную навигацию. Например, по требованиям SEO, из-за конфликтов с другими скриптами или по личным предпочтениям.
Что такое AJAX пагинация и почему её иногда нужно отключать
AJAX пагинация позволяет загружать следующий контент на странице без полной перезагрузки, улучшая UX и ускоряя взаимодействие. Однако у неё есть недостатки:
- Не всегда корректно работают SEO-просмотры, если URL не меняется.
- Может конфликтовать с другими плагинами или кастомным JS.
- Труднее отлаживать ошибки из-за асинхронных запросов.
Если вы столкнулись с такими проблемами, лучше отключить AJAX пагинацию.
Как определить, что в вашей теме или плагине используется AJAX пагинация
Перед отключением важно точно понять, где реализована AJAX пагинация. Обычно это делается через JavaScript и AJAX-запросы к WordPress для подгрузки новых постов.
Проверьте следующие моменты:
- В консоли браузера в разделе Network при клике на пагинацию виден AJAX-запрос.
- В исходном коде темы есть файлы JS с функциями, которые перехватывают клики по ссылкам пагинации.
- В functions.php или подключаемых плагинах используются хуки
wp_ajax_для обработки AJAX запросов.
Если уверены, что пагинация AJAX, то приступаем к отключению.
Отключение AJAX пагинации: пошаговое руководство
1. Удаление JS, отвечающего за AJAX пагинацию
В большинстве случаев, AJAX пагинация подключается через отдельный скрипт. Его нужно отключить или убрать регистрацию.
Пример для темы (добавьте в functions.php вашей темы):
function wpsocial_dequeue_ajax_pagination() {
wp_dequeue_script('ajax-pagination'); // замените 'ajax-pagination' на хендл вашего скрипта
}
add_action('wp_enqueue_scripts', 'wpsocial_dequeue_ajax_pagination', 20);
Если хендл скрипта неизвестен, найдите его в исходниках темы или плагина.
2. Отключение PHP обработчиков AJAX-запросов пагинации
Если пагинация использует кастомные AJAX-обработчики, можно удалить соответствующие хуки:
function wpsocial_remove_ajax_pagination_hooks() {
remove_action('wp_ajax_nopriv_load_posts', 'load_posts_callback');
remove_action('wp_ajax_load_posts', 'load_posts_callback');
}
add_action('init', 'wpsocial_remove_ajax_pagination_hooks');
Замените load_posts_callback на вашу функцию, обрабатывающую AJAX.
3. Замена на классическую пагинацию WordPress
После отключения AJAX пагинации, нужно вернуть вывод классической пагинации. Самый простой способ — использовать встроенную функцию the_posts_pagination():
if (function_exists('the_posts_pagination')) {
the_posts_pagination(array(
'mid_size' => 2,
'prev_text' => __('« Назад', 'wpsocial'),
'next_text' => __('Вперёд »', 'wpsocial'),
));
}
Добавьте этот код в файл вашей темы, где выводится список постов (например, archive.php или index.php), заменив AJAX пагинацию.
Дополнительные советы по улучшению классической пагинации
Чтобы классическая пагинация выглядела современно и была удобной, рекомендуем:
- Использовать стили из вашей темы или подключить CSS для кнопок.
- Добавить aria-label и другие атрибуты для доступности.
- Если хотите расширить функционал, используйте плагин ABC Pagination, который позволяет гибко настраивать классическую пагинацию с поддержкой AJAX и без.
Пример кода полной замены AJAX пагинации на классическую в теме
// Отключаем скрипт AJAX пагинации
function wpsocial_dequeue_ajax_pagination() {
wp_dequeue_script('ajax-pagination');
}
add_action('wp_enqueue_scripts', 'wpsocial_dequeue_ajax_pagination', 20);
// Удаляем AJAX обработчики
function wpsocial_remove_ajax_pagination_hooks() {
remove_action('wp_ajax_nopriv_load_posts', 'load_posts_callback');
remove_action('wp_ajax_load_posts', 'load_posts_callback');
}
add_action('init', 'wpsocial_remove_ajax_pagination_hooks');
// В шаблоне темы, например archive.php, заменяем пагинацию
if (have_posts()) :
while (have_posts()) : the_post();
// вывод поста
endwhile;
the_posts_pagination(array(
'mid_size' => 2,
'prev_text' => __('« Назад', 'wpsocial'),
'next_text' => __('Вперёд »', 'wpsocial'),
));
else :
echo '<p>Посты не найдены.</p>';
endif;
Заключение по теме отключения AJAX пагинации
Отключение AJAX пагинации — частая задача при настройке WordPress-сайтов, особенно когда требуется улучшить SEO или устранить конфликты. Главное — внимательно найти и убрать все связанные с AJAX обработчики и скрипты, а затем заменить вывода на стандартный код. Если нужна расширенная классическая пагинация с удобной настройкой, можно использовать ABC Pagination от WPSHOP.