Как настроить постраничную пагинацию в Wordpress с использованием технологии Ajax?

Как можно модифицировать данное выражение для присвоения переменной $current_page значения параметра "stranitsa" из массива $_GET, при условии его наличия, либо присвоить значение 1?
  • 14 января 2024 г. 18:18
Ответы на вопрос 1
Для настройки постраничной пагинации в 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-пагинации вам потребуется правильно настроить свои шаблоны и об
Похожие вопросы