Для настройки постраничной пагинации в WordPress с использованием AJAX, вам нужно будет следовать нескольким шагам. Вот общее руководство, как это можно сделать:
### Шаг 1: Добавление скрипта AJAX в вашу тему
Сначала нужно зарегистрировать и добавить скрипт JS, который будет обрабатывать AJAX-запросы.
Добавьте следующий код в `functions.php` вашей темы:
```php
function my_ajax_pagination_scripts() {
wp_enqueue_script('my-ajax-pagination', get_template_directory_uri() . '/js/ajax-pagination.js', array('jquery'), null, true );
wp_localize_script('my-ajax-pagination', 'ajaxpagination', array(
'ajaxurl' => admin_url('admin-ajax.php')
));
}
add_action('wp_enqueue_scripts', 'my_ajax_pagination_scripts');
```
Создать файл `ajax-pagination.js` в каталоге `js` вашей темы и добавьте туда JavaScript для обработки клика по кнопке пагинации, отправки AJAX-запроса и вставки ответа в соответствующее место на странице.
### Шаг 2: Обработка AJAX-запроса на сервере
Добавьте обработчик AJAX-запросов в `functions.php`:
```php
function my_ajax_pagination() {
$query_vars = json_decode(stripslashes($_POST['query_vars']), true);
$query_vars['paged'] = $_POST['page'];
$posts = new WP_Query($query_vars);
$GLOBALS['wp_query'] = $posts;
if( ! $posts->have_posts() ) {
get_template_part('no-results');
die;
}
while ( $posts->have_posts() ) {
$posts->the_post();
get_template_part('content', get_post_format());
}
die;
}
add_action('wp_ajax_nopriv_my_ajax_pagination', 'my_ajax_pagination');
add_action('wp_ajax_my_ajax_pagination', 'my_ajax_pagination');
```
Этот код добавляет два действия: одно для неаутентифицированных пользователей (`wp_ajax_nopriv_...`) и одно для аутентифицированных (`wp_ajax_...`).
### Шаг 3: Модификация PHP-выражения для переменной `$current_page`
Чтобы присвоить переменной `$current_page` значение параметра "stranitsa" из массива `$_GET` при его наличии, или значение 1, нужно написать следующее:
```php
$current_page = isset($_GET['stranitsa']) ? intval($_GET['stranitsa']) : 1;
```
Это условное выражение проверяет существование параметра `stranitsa` в массиве `$_GET`. Если параметр существует и является числом, то `intval` преобразует его в целое число, иначе переменной присваивается значение 1.
### Шаг 4: Настройка пагинации на стороне клиента
В файле `ajax-pagination.js` добавьте код для отправки запроса:
```javascript
jQuery(document).ready(function($) {
$(document).on('click', '.page-numbers a', function(e){
e.preventDefault();
var page = $(this).text(); // номер страницы
var query_vars = $('.posts').data('query-vars');
$.post(ajaxpagination.ajaxurl, {
action: 'my_ajax_pagination',
query_vars: query_vars,
page: page
}, function(result){
$('.posts').html(result);
});
});
});
```
Убедитесь, что элементы пагинации на странице имеют класс `.page-numbers`, а контейнер, в который вы будете вставлять новые посты, имеет класс `.posts` и атрибут `data-query-vars`, хранящий текущие параметры запроса к WP_Query.
Помните, что для корректной работы AJAX-пагинации вам потребуется правильно настроить свои шаблоны и об