YARPP и комплексное кеширование связанных записей в WordPress

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

Почему важно кешировать связанные записи в YARPP

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

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

Рассмотрим несколько способов кеширования связанных записей в YARPP с примерами кода и рекомендациями.

Виды кеширования для YARPP

1. Встроенное кеширование YARPP

С версии 4.5 YARPP реализует базовое кеширование результатов выборки в опциях WordPress. Но для крупных проектов этого часто недостаточно.

Кеш хранится в базе данных и очищается при обновлении записи или изменении контента.

2. Использование Object Cache (Redis, Memcached)

Для повышения производительности рекомендую использовать внешнее объектное кеширование через Redis или Memcached. WordPress поддерживает это через плагины типа Clearfy Pro, который умеет оптимизировать кеширование и совместим с YARPP.

Пример подключения Redis для кеширования YARPP:

function yarpp_redis_cache_results($results, $post_id) {
    $cache_key = 'yarpp_related_' . $post_id;
    $cached = wp_cache_get($cache_key, 'yarpp');
    if ($cached !== false) {
        return $cached;
    }
    wp_cache_set($cache_key, $results, 'yarpp', 3600); // Кеш на 1 час
    return $results;
}
add_filter('yarpp_get_related', 'yarpp_redis_cache_results', 10, 2);

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

3. Кеширование на уровне шаблона с помощью Transients API

Если вы хотите кешировать сгенерированный HTML блок связанных записей, можно использовать Transients API. Это подходит, если структура вывода сложная, и вы хотите не только кешировать данные, но и готовый HTML.

Пример реализации:

function yarpp_ru_get_related_posts_html($post_id) {
    $cache_key = 'yarpp_related_html_' . $post_id;
    $cached_html = get_transient($cache_key);
    if ($cached_html !== false) {
        return $cached_html;
    }

    $related_posts = yarpp_get_related(array('post_id' => $post_id));
    if (empty($related_posts)) {
        return '';
    }

    ob_start();
    echo '<ul class="yarpp-related-list">';
    foreach ($related_posts as $post) {
        echo '<li><a href="' . get_permalink($post->ID) . '">' . esc_html(get_the_title($post->ID)) . '</a></li>';
    }
    echo '</ul>';

    $html = ob_get_clean();
    set_transient($cache_key, $html, HOUR_IN_SECONDS);

    return $html;
}

Выводим в шаблоне так:

echo yarpp_ru_get_related_posts_html(get_the_ID());

При изменении контента кэш нужно сбрасывать, для этого можно повесить удаление transient на хуки обновления записи.

Как организовать сброс кеша YARPP при обновлении записей

Чтобы кеш всегда был актуальным, нужно удалять сохранённые данные при изменении постов. Добавим следующие хуки:

function yarpp_ru_clear_cache_on_save($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    delete_transient('yarpp_related_html_' . $post_id);
    wp_cache_delete('yarpp_related_' . $post_id, 'yarpp');
}
add_action('save_post', 'yarpp_ru_clear_cache_on_save');
add_action('delete_post', 'yarpp_ru_clear_cache_on_save');

Таким образом, при любом обновлении или удалении записи кэш YARPP будет очищаться, и пользователи увидят актуальные связанные записи.

Дополнительные советы по оптимизации YARPP на больших сайтах

Используйте выборочный кешинг и пагинацию

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

Оптимизируйте запросы YARPP

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

Используйте кастомные шаблоны YARPP

Создайте кастомные шаблоны вывода YARPP, которые генерируют минимально необходимый HTML. Чем проще и компактнее шаблон, тем быстрее рендеринг.

Выводы

Комплексное кеширование связанных записей YARPP — ключ к высокой производительности крупных WordPress-сайтов. Комбинация объектного кеширования, Transients API и грамотного сброса кеша при обновлениях поможет значительно ускорить выдачу связанных записей.

Рекомендуется тестировать разные методы кеширования в вашей среде, чтобы подобрать оптимальный вариант.

Для удобства оптимизации можно использовать плагины из WPShop.ru, например, Clearfy Pro для продвинутого кеширования и оптимизации.

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

⭐⭐⭐⭐⭐
Как создать свой плагин для автоматического создания связанных записей в WordPress
18.11.2025
WooCommerce: как исключить товары по метаданным из списка связанных товаров
30.04.2026
Как создать кастомные шаблоны связанных записей в WordPress
22.12.2025
YARPP интеграция своими хуками и фильтрами для кастомизации связанных записей
12.12.2025
YARPP и WooCommerce: как сделать подбор связанных товаров в интернет-магазине
22.01.2026
×
WordPress
дай сайту суперсилу!

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

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