Что может быть причиной неработающей пагинации в настройках кастомного типа записи?

Я столкнулся с проблемой, когда на всех страницах пагинации для кастомного типа контента отображается одинаковый контент. Несмотря на то, что при переходе к следующей странице в URL добавляется номер страницы, содержимое остается неизменным. Я обновил структуру ссылок. Вот код моих шаблонов: <br/> 1 front-page.php: <br/> <pre><code class="php">&lt;?php
get_header(); ?&gt;
            &lt;div id="content"&gt;

                &lt;?php
                // Получение текущей страницы, если не указано, то по умолчанию 1
                $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

                // Запрос для получения постов
                $args = [
                    'post_type' =&gt; 'agency',
                    'post_status' =&gt; 'publish',
                    'orderby' =&gt; 'date',
                    'order' =&gt; 'DESC',
                    'posts_per_page' =&gt; 10,  // Количество постов на одной странице
                    'paged' =&gt; $paged, // Номер текущей страницы
                ];

                $query = new WP_Query($args);
                ?&gt;

                &lt;?php if ($query-&gt;have_posts()):
                    $arr_id = []; ?&gt;
                    &lt;?php while ($query-&gt;have_posts()):
                        $query-&gt;the_post();
                        the_id();
                        ?&gt;
                    &lt;?php endwhile; ?&gt;

                    &lt;!-- Пагинация --&gt;
                    &lt;div class="pagination"&gt;
                        &lt;?php
                        echo paginate_links([
                            'total' =&gt; $query-&gt;max_num_pages, // Общее количество страниц
                            'current' =&gt; $paged, //
  • 8 сентября 2024 г. 13:13
Ответы на вопрос 2
Проблема с пагинацией, когда на всех страницах отображается одинаковый контент, часто связана с неправильной обработкой переменной `$paged` или с тем, как вы работаете с запросом `WP_Query`. Рассмотрим несколько возможных причин и решений:

### 1. Проверка правильности параметров запроса
Убедитесь, что вы правильно передаете переменную `$paged` в параметры вашего запроса. Посмотрите, получаете ли вы правильное значение для `$paged`.

### 2. Использование `the_post()`
Важно отметить, что после `WP_Query` необходимо сбросить глобальную переменную `$post`, чтобы избежать конфликта между различными запросами. После использования `the_post()`, вам нужно добавить функцию `wp_reset_postdata();` в конце цикла. Например:

```php
while ($query->have_posts()) {
    $query->the_post();
    // Ваш код для отображения поста
}
wp_reset_postdata(); // Сбросить данные поста
```

### 3. Проверка структуры постоянных ссылок
Иногда проблемы с пагинацией могут быть связаны с неправильными настройками постоянных ссылок. Убедитесь, что структура ссылок установлена правильно. Чтобы обновить настройки, просто перейдите в настройки постоянных ссылок и сохраните изменения, даже если вы ничего не меняете.

### 4. Проверка на блокировщики
Если у вас есть плагины, которые могут оказывать влияние на запросы, временно отключите их, чтобы проверить, является ли это источником проблемы.

### 5. Совмещение с другими запросами
Если ваш шаблон или другие части кода выполняют дополнительные запросы, это может испортить работу с глобальными переменными. Используйте `wp_reset_postdata();` после каждого запроса, чтобы избежать этого.

### 6. Замена `paged` на `page`
Убедитесь, что вы используете `paged` как параметр. Если вы используете `page`, это может вызвать проблемы.

### Пример исправленного кода
Вот пример вашего кода с исправлениями на основе вышеуказанных рекомендаций:

```php
get_header(); ?>

<div id="content">

    <?php
    // Получение текущей страницы
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    // Запрос для получения постов
    $args = [
        'post_type' => 'agency',
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'DESC',
        'posts_per_page' => 10,  // Количество постов на одной странице
        'paged' => $paged, // Номер текущей страницы
    ];

    $query = new WP_Query($args);

    if ($query->have_posts()):
        while ($query->have_posts()):
            $query->the_post();
            // Ваш код для отображения поста
        endwhile;
        
        // Пагинация
        echo paginate_links([
            'total' => $query->max_num_pages,
            'current' => $paged,
        ]);
    else:
        // Сообщение, если постов нет
        echo '<p>No posts found.</p>';
    endif;

    // Сброс данных
    wp_reset_postdata();
    ?>

</div>

<?php get_footer(); ?>
```

Пожалуйста, проверьте каждый из указанных пунктов и убедитесь, что все сделано правильно. Это должно помочь решить проблему с пагинацией.
Решилось такой конструкцией: 
$paged = (get_query_var('paged')) ? get_query_var('paged') : (get_query_var('page') ? get_query_var('page') : 1);
Похожие вопросы