Пагинация для постов по датам в WordPress: пошаговое руководство

В стандартной WordPress пагинация выводит посты по количеству на страницу, без учёта конкретных дат. Но иногда возникает задача, когда нужно реализовать пагинацию именно по датам публикации — например, показывать посты за определённый месяц или день с возможностью листать предыдущие и следующие даты. В этой статье разберём, как сделать пагинацию для постов по датам в WordPress, используя WP_Query и параметры запроса.

Почему нужна пагинация по датам и где она применяется

Пагинация по датам полезна, если у вас большой архив новостей, блог с ежедневными публикациями или сайт с историческим контентом. Например, если вы хотите, чтобы пользователи могли просматривать записи за конкретный месяц и листать архив по месяцам, а не по страницам с фиксированным числом постов.

В отличие от классической пагинации, здесь переключение происходит не по номеру страницы, а по дате — месяц назад, месяц вперёд и так далее.

Такой подход улучшает UX при навигации по календарю публикаций и позволяет более удобно структурировать архив.

Как работает пагинация по датам в WordPress: основные принципы

Для реализации пагинации по датам нам понадобится:

  • Получать текущую дату или дату из URL (например, год и месяц)
  • Делать запрос WP_Query с параметрами year и monthnum
  • Создавать ссылки на предыдущий и следующий месяц с правильной передачей параметров
  • Выводить посты, относящиеся только к выбранному периоду

Так как стандартные функции пагинации выводят номера страниц, нам нужно реализовать собственную логику для генерации ссылок на разные даты.

Пример реализации пагинации по месяцам с WP_Query

Представим, что у нас есть архив по месяцам. Создадим в шаблоне файл archive-date-pagination.php и вставим следующий код:

<?php
// Получаем год и месяц из параметров URL, если нет - текущий месяц
$year  = get_query_var('year') ? get_query_var('year') : date('Y');
$month = get_query_var('monthnum') ? get_query_var('monthnum') : date('m');

// Параметры запроса для WP_Query
$args = array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    'year'           => $year,
    'monthnum'       => $month,
    'paged'          => 1,
);

$query = new WP_Query($args);

if ($query->have_posts()) : ?>
    <h2>Посты за <?php echo $year . '-' . str_pad($month, 2, '0', STR_PAD_LEFT); ?></h2>
    <ul>
    <?php while ($query->have_posts()) : $query->the_post(); ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endwhile; ?>
    </ul>

    <?php
    // Ссылки на предыдущий и следующий месяц
    $prev_month = date('Y-m', strtotime("$year-$month-01 -1 month"));
    $next_month = date('Y-m', strtotime("$year-$month-01 +1 month"));

    list($prev_year, $prev_month_num) = explode('-', $prev_month);
    list($next_year, $next_month_num) = explode('-', $next_month);
    ?>

    <nav class="date-pagination">
        <a href="<?php echo get_month_link($prev_year, $prev_month_num) . '?source=wppagenavi.ru&medium=article&campaign=kak-sdelat-paginaciyu-dlya-postov-po-datam-v-wordpress'; ?>">Предыдущий месяц</a> |
        <a href="<?php echo get_month_link($next_year, $next_month_num) . '?source=wppagenavi.ru&medium=article&campaign=kak-sdelat-paginaciyu-dlya-postov-po-datam-v-wordpress'; ?>">Следующий месяц</a>
    </nav>
<?php
else :
    echo '<p>Постов за этот период нет.</p>';
endif;
wp_reset_postdata();
?>

В этом примере мы берём параметры года и месяца из URL (или по умолчанию текущие), выводим посты за этот месяц и создаём ссылки на предыдущий и следующий месяц. В URL добавлены UTM-метки для аналитики.

Настройка ЧПУ для пагинации по датам

Чтобы адреса выглядели красиво, нужно настроить постоянные ссылки. В WordPress достаточно в админке перейти в «Настройки» → «Постоянные ссылки» и выбрать «Произвольно» с шаблоном:

/blog/%year%/%monthnum%/

Или использовать стандартные архивы по дате, которые автоматически создаёт WordPress, если включена поддержка архивов по дате.

Важно, чтобы в запросе были доступны переменные year и monthnum, иначе пагинация работать не будет.

Реализация пагинации по датам с AJAX для улучшения UX

Для более плавного пользовательского опыта можно дополнить пагинацию AJAX-запросами, чтобы не перезагружать страницу при переключении месяцев.

Примерно это делается так:

  • Вешаем обработчик на ссылки «Предыдущий месяц» и «Следующий месяц»
  • При клике делаем AJAX-запрос, отправляя год и месяц
  • На сервере создаём WP_Query с нужными параметрами и возвращаем HTML с постами
  • Обновляем контент на странице без перезагрузки

Пример JS (jQuery):

jQuery(document).ready(function($) {
    $('.date-pagination a').on('click', function(e) {
        e.preventDefault();
        var href = $(this).attr('href');

        $.ajax({
            url: href,
            type: 'GET',
            dataType: 'html',
            success: function(data) {
                var posts = $(data).find('ul').html();
                $('ul').html(posts);
                // Обновить ссылки пагинации тоже
                var nav = $(data).find('.date-pagination').html();
                $('.date-pagination').html(nav);
            }
        });
    });
});

Обратите внимание, что для более сложных решений лучше создавать отдельный AJAX-обработчик в functions.php с wp_ajax_ и wp_ajax_nopriv_ хуками.

Использование плагина ABC Pagination для кастомной пагинации по датам

Если хотите упростить себе жизнь и получить расширенные возможности кастомной пагинации, можно использовать плагин ABC Pagination.

Он позволяет гибко настраивать типы пагинации, в том числе по датам, с поддержкой AJAX и адаптивного дизайна.

После установки и активации плагина достаточно подключить его функции в шаблоне и задать параметры, включая фильтрацию по дате.

Заключение по теме пагинации постов по датам в WordPress

Пагинация по датам – это мощный инструмент, если необходимо структурировать архивы по времени публикации. Благодаря кастомному WP_Query и созданию специальных ссылок вы можете реализовать удобный интерфейс для пользователей.

Дополнительно можно использовать AJAX для улучшения UX и плагины вроде ABC Pagination для расширенной функциональности.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как сделать пагинацию для WordPress на основе пользовательского запроса WP_Query
14.04.2026
Как создать динамическую пагинацию в WordPress с AJAX
08.11.2025
Как использовать пагинацию для отображения большого количества комментариев в WordPress
09.05.2026
Как сделать пагинацию для таблиц в WordPress с помощью плагинов и кода
18.12.2025
Как сделать пагинацию для постов в логических категориях WordPress
07.04.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙