Как создать внутреннюю кэширу в GeneratePress для ускорения загрузки сайта

Внутреннее кэширование — один из наиболее эффективных способов ускорить загрузку сайта на WordPress, особенно на легкой и гибкой теме GeneratePress. В этой статье мы подробно рассмотрим, как реализовать собственное внутреннее кэширование для отдельных частей сайта, чтобы снизить нагрузку на сервер и улучшить пользовательский опыт.

Почему внутреннее кэширование важно для сайтов на GeneratePress

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

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

Основные преимущества внутреннего кэша:

  • Снижение времени обработки PHP и запросов к базе данных;
  • Уменьшение нагрузки на сервер при большом трафике;
  • Улучшение показателей Core Web Vitals за счёт быстрой отдачи контента;
  • Гибкость — можно кэшировать только отдельные компоненты сайта.

Как реализовать внутреннее кэширование в GeneratePress с помощью transient API

WordPress предоставляет встроенный механизм кэширования — Transients API. Он позволяет сохранять временные данные с указанием срока жизни. Это идеальный вариант для кэширования части страницы или результата сложного запроса.

Рассмотрим пример создания функции generatepressru_set_transient, которая кэширует результат функции генерации динамического контента в GeneratePress.

function generatepressru_set_transient( $transient_name, $callback, $expiration = 3600 ) {
    $cached = get_transient( $transient_name );
    if ( false !== $cached ) {
        return $cached;
    }
    $data = call_user_func( $callback );
    set_transient( $transient_name, $data, $expiration );
    return $data;
}

Эта функция принимает имя кэша, callback для получения данных и время жизни в секундах. Если кэш есть — возвращает его, иначе вызывает callback, сохраняет результат и возвращает.

Пример использования для кэширования списка последних постов

function generatepressru_get_latest_posts_html() {
    return generatepressru_set_transient('gp_latest_posts_html', function() {
        $posts = get_posts([ 'numberposts' => 5, 'post_status' => 'publish' ]);
        if ( empty( $posts ) ) {
            return '<p>Нет последних постов</p>';
        }
        $output = '<ul>';
        foreach ( $posts as $post ) {
            $output .= '<li><a href="' . get_permalink( $post ) . '">' . esc_html( get_the_title( $post ) ) . '</a></li>';
        }
        $output .= '</ul>';
        return $output;
    }, 600 ); // кэш на 10 минут
}

Встраиваем вызов generatepressru_get_latest_posts_html() в нужное место темы, например, в sidebar.php или через хук GeneratePress.

Оптимизация кэша: сброс и обновление при изменениях контента

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

function generatepressru_clear_transient_on_post_save( $post_id ) {
    if ( wp_is_post_revision( $post_id ) ) {
        return;
    }
    delete_transient( 'gp_latest_posts_html' );
}
add_action( 'save_post', 'generatepressru_clear_transient_on_post_save' );

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

Использование плагинов для расширенного внутреннего кэширования в GeneratePress

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

  • Clearfy Pro — оптимизация и кэширование с удобным интерфейсом и очисткой ненужных запросов;
  • ABC Pagination — для кэширования пагинации и постраничной навигации;
  • WPRemark — кэширование пользовательских отзывов и комментариев.

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

Кэширование AJAX-запросов в GeneratePress

Если на сайте используются AJAX-запросы для динамического контента (например, фильтры или подгрузка постов), имеет смысл кэшировать их ответы на сервере.

Пример кэширования AJAX-обработчика:

add_action( 'wp_ajax_generatepressru_load_more', 'generatepressru_ajax_load_more' );
add_action( 'wp_ajax_nopriv_generatepressru_load_more', 'generatepressru_ajax_load_more' );

function generatepressru_ajax_load_more() {
    $page = isset( $_POST['page'] ) ? intval( $_POST['page'] ) : 1;
    $transient_key = 'gp_ajax_load_more_' . $page;
    $response = get_transient( $transient_key );
    if ( false === $response ) {
        // Выполняем запрос
        $posts = get_posts([
            'paged' => $page,
            'posts_per_page' => 5,
            'post_status' => 'publish'
        ]);
        ob_start();
        if ( $posts ) {
            foreach ( $posts as $post ) {
                setup_postdata( $post );
                echo '<div><a href="' . get_permalink() . '">' . get_the_title() . '</a></div>';
            }
            wp_reset_postdata();
        } else {
            echo '<p>Нет дополнительных записей</p>';
        }
        $response = ob_get_clean();
        set_transient( $transient_key, $response, HOUR_IN_SECONDS );
    }
    wp_send_json_success( $response );
}

Такой подход значительно снижает нагрузку на сервер при частых AJAX-запросах.

Заключение по внутреннему кэшированию в GeneratePress

Внутреннее кэширование — мощный инструмент в арсенале разработчика GeneratePress. Правильная реализация с помощью Transients API позволяет ускорить сайт, снизить нагрузку и улучшить взаимодействие с пользователями без больших затрат.

Вместе с плагинами из WPShop можно построить максимально производительный и адаптированный под задачи сайт на GeneratePress.

Как добавить уникальные метаданные для страниц в GeneratePress
09.12.2025
Как добавить отложенную загрузку картинок в GeneratePress для ускорения сайта
23.01.2026
Оптимизация кода GeneratePress для ускорения сайта на WordPress
11.11.2025
Как удалить ненужные скрипты и стили в GeneratePress для оптимизации загрузки сайта
24.03.2026
Как изменить количество товаров на странице категории WooCommerce в GeneratePress
21.04.2026