YARPP и пагинация: правильный вывод связанных записей с разбивкой на страницы

Плагин YARPP (Yet Another Related Posts Plugin) — это один из самых популярных инструментов для вывода связанных записей в WordPress. Однако, по умолчанию YARPP выводит все связанные записи без разбивки на страницы, что может негативно сказаться на производительности сайта и удобстве пользователей, особенно если количество связанных записей велико.

Почему важна пагинация для связанных записей в YARPP

Если на странице статьи выводить сразу большое количество связанных записей, это может привести к:

  • Увеличению времени загрузки страницы из-за большого объема запросов к базе данных.
  • Потере удобства для пользователя — слишком длинный блок с записями сложно воспринимать.
  • Проблемам с SEO — избыточный контент и дублирование могут ухудшить индексацию.

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

Как реализовать пагинацию для YARPP: обзор вариантов

Стандартный функционал YARPP не включает поддержку разбивки на страницы. Чтобы добавить пагинацию, можно использовать несколько подходов:

1. Кастомная реализация с WP_Query и YARPP API

YARPP предоставляет функцию yarpp_get_related(), которая возвращает массив ID связанных записей. На основе этого массива можно создать собственный WP_Query с параметрами пагинации.

Пример кода:

function yarppru_get_related_with_pagination($post_id, $posts_per_page = 5, $paged = 1) {
    // Получаем ID связанных записей
    $related_ids = yarpp_get_related($post_id, ['limit' => 100, 'post_type' => 'post']);

    if (empty($related_ids)) {
        return null;
    }

    // Подсчет общего количества
    $total_related = count($related_ids);

    // Вычисляем срез массива для текущей страницы
    $offset = ($paged - 1) * $posts_per_page;
    $paged_related_ids = array_slice($related_ids, $offset, $posts_per_page);

    // Создаем WP_Query
    $args = [
        'post__in' => $paged_related_ids,
        'orderby' => 'post__in',
        'posts_per_page' => $posts_per_page,
        'paged' => $paged
    ];
    $query = new WP_Query($args);

    return [$query, $total_related];
}

В шаблоне выводите записи из $query, а ниже — навигацию по страницам, рассчитывая общее число страниц как ceil($total_related / $posts_per_page).

2. Использование плагинов для пагинации

Если не хочется писать код, можно найти плагины, расширяющие YARPP поддержкой пагинации. Однако таких решений мало, и они могут быть неактуальны.

3. AJAX-подгрузка связанных записей

Более современный подход — выводить первые N записей сразу, а остальные загружать по нажатию кнопки через AJAX. Это повышает отзывчивость страницы и снижает нагрузку.

Пример простого AJAX-запроса для подгрузки следующих связанных записей:

jQuery(document).ready(function($) {
    $('#load-more-related').on('click', function() {
        var data = {
            action: 'yarppru_load_more',
            post_id: $(this).data('post'),
            paged: $(this).data('paged') + 1
        };

        $.post(ajaxurl, data, function(response) {
            if(response) {
                $('#related-posts-container').append(response);
                $('#load-more-related').data('paged', data.paged);
            } else {
                $('#load-more-related').hide();
            }
        });
    });
});

Для обработки запроса на сервере регистрируем AJAX-хук, который использует yarpp_get_related(), чтобы получить следующие записи.

Подробная инструкция по реализации пагинации YARPP с кодом

Для примера рассмотрим вариант с WP_Query и разбиением массива связанных записей. В functions.php темы или плагина добавьте функцию:

function yarppru_related_posts_with_pagination() {
    global $post;

    $paged = isset($_GET['related_page']) ? intval($_GET['related_page']) : 1;
    $posts_per_page = 5;

    list($query, $total_related) = yarppru_get_related_with_pagination($post->ID, $posts_per_page, $paged);

    if (!$query || !$query->have_posts()) {
        echo '<p>Связанных записей не найдено.</p>';
        return;
    }

    echo '<div class="yarpp-related-posts">';
    while ($query->have_posts()) {
        $query->the_post();
        echo '<div class="related-post-item">';
        echo '<a href="' . get_permalink() . '">' . get_the_title() . '</a>';
        echo '</div>';
    }
    echo '</div>';

    // Навигация
    $total_pages = ceil($total_related / $posts_per_page);
    if ($total_pages > 1) {
        echo '<nav class="yarpp-pagination">';
        for ($i = 1; $i <= $total_pages; $i++) {
            if ($i == $paged) {
                echo '<span class="current-page">' . $i . '</span>';
            } else {
                $url = add_query_arg('related_page', $i);
                echo '<a href="' . esc_url($url) . '">' . $i . '</a>';
            }
        }
        echo '</nav>';
    }

    wp_reset_postdata();
}

В шаблоне single.php подключите вывод так:

<?php yarppru_related_posts_with_pagination(); ?>

Советы по оптимизации и настройке YARPP с пагинацией

Для корректной работы и производительности учтите следующие моменты:

  • Устанавливайте разумный лимит для yarpp_get_related(), чтобы не загружать лишние записи.
  • Кешируйте результаты запросов, например, с помощью Transients API, чтобы не генерировать связанные записи на каждом запросе.
  • Проверяйте совместимость с темой и другими плагинами, чтобы не было конфликтов отображения и стилей.
  • Используйте CSS для удобного отображения пагинации и адаптации под мобильные устройства.

Альтернативные плагины и инструменты для связанных записей с пагинацией

Если YARPP кажется слишком сложным для кастомной пагинации, рассмотрите альтернативы:

  • Contextual Related Posts — поддерживает вывод связанных записей с пагинацией и кешированием.
  • Related Posts for WordPress — простой и современный плагин с возможностью пагинации.

Но если вы хотите гибко контролировать алгоритмы и внешний вид, то YARPP с кастомной пагинацией — лучший вариант.

Заключение

Добавление пагинации в YARPP — это практическое решение, которое повышает удобство пользователей и оптимизирует нагрузку на сервер. Используя yarpp_get_related() и WP_Query, можно реализовать удобный и быстрый вывод связанных записей с разбивкой на страницы. Не забывайте про кеширование и тестирование на разных устройствах.

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

⭐⭐⭐⭐⭐
Как создать автоматические связи между записями по тегам в WordPress
07.02.2026
Как добавить собственный тип записей в WordPress: практическое руководство с примерами кода
26.11.2025
Как создать собственный блок связанных записей с использованием YARPP и AJAX
21.03.2026
YARPP и Multisite: как синхронизировать связанные записи в мультисайтовой сети WordPress
18.01.2026
Как автоматизировать создание связанных записей по ключевым словам в WordPress
09.04.2026
×
WordPress
дай сайту суперсилу!

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

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