Проблема с пагинацией, когда на всех страницах отображается одинаковый контент, часто связана с неправильной обработкой переменной `$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(); ?>
```
Пожалуйста, проверьте каждый из указанных пунктов и убедитесь, что все сделано правильно. Это должно помочь решить проблему с пагинацией.