неправильно работает пагинация wordpress
Всем привет, пагинация с использованием функции the_posts_pagination() неправильно работает: при клике на ссылку переходит на главную страницу.
<?php
// Запрашиваем продукты
$query = new WP_Query([
'post_type' => 'news',
'posts_per_page' => 2,
'paged' => get_query_var('page'),
]);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
?>
<div class="card">
<div class="card__header">
<h3 class="card__title card__title--news">
<a class="card__link" href="<?php the_permalink($post) ?>">
<?php the_title() ?>
</a>
</h3>
</div>
<div class="card__data">
<time class="card__time" datetime="<?php echo get_post_time('Y-m-d'); ?>">
<?php echo get_post_time(' j F Y', false, null, true); ?>
</time>
</div>
<div class="card__description">
<span>
<?php the_content() ?>
</span>
</div>
<a class="card__detail" href="<?php the_permalink($post) ?>">Подробнее</a>
</div>
<?php
}
wp_reset_postdata();
}
echo paginate_links( [
'base' => user_trailingslashit( wp_normalize_path( get_permalink() .'/%#%/' ) ),
'current' => max( 1, get_query_var( 'page' ) ),
'total' => $query->max_num_pages,
] );
?>
</div> <!-- /.cards -->
Ответы (1 шт):
Автор решения: Viktor
→ Ссылка
Ваш код для пагинации выглядит почти правильно, но есть несколько моментов, которые нужно исправить, чтобы пагинация работала корректно.
Использование paged вместо page:
В WordPress для пагинации обычно используется параметр paged, а не page.Правильное формирование базового URL для пагинации:
Убедитесь, что базовый URL для пагинации формируется правильно.
Вот исправленный код:
<?php
// Запрашиваем продукты
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = new WP_Query([
'post_type' => 'news',
'posts_per_page' => 2,
'paged' => $paged,
]);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
?>
<div class="card">
<div class="card__header">
<h3 class="card__title card__title--news">
<a class="card__link" href="<?php the_permalink($post) ?>">
<?php the_title() ?>
</a>
</h3>
</div>
<div class="card__data">
<time class="card__time" datetime="<?php echo get_post_time('Y-m-d'); ?>">
<?php echo get_post_time(' j F Y', false, null, true); ?>
</time>
</div>
<div class="card__description">
<span>
<?php the_content() ?>
</span>
</div>
<a class="card__detail" href="<?php the_permalink($post) ?>">Подробнее</a>
</div>
<?php
}
wp_reset_postdata();
}
echo paginate_links( [
'base' => user_trailingslashit( wp_normalize_path( get_permalink() .'/%#%/' ) ),
'current' => max( 1, get_query_var( 'paged' ) ),
'total' => $query->max_num_pages,
] );
?>
</div> <!-- /.cards -->
- Использование
paged
: Мы используемpaged
вместоpage
для получения текущей страницы. - Проверка наличия
paged
: Если paged не установлен, мы устанавливаем его значение в 1. - Правильное формирование базового URL: Мы используем
user_trailingslashit
иwp_normalize_path
для формирования базового URL для пагинации.
Эти изменения должны исправить проблему с пагинацией и предотвратить переход на главную страницу при клике на ссылку.