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

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

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

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

1. Создаем функцию проверки авторизации и вывода кастомного контента

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

function gp_custom_product_template_content() {
    if ( is_user_logged_in() ) {
        // Кастомный контент для зарегистрированных пользователей
        echo '<div class="gp-logged-in-info">';
        echo '<p><strong>Специальное предложение для вас!</strong> Получите скидку 10% при покупке этого товара.</p>';
        // Дополнительный пример: показать кастомную цену
        global $product;
        if ( $product ) {
            $price = $product->get_price();
            $discounted_price = $price * 0.9; // 10% скидка
            echo '<p>Цена для вас: <del>' . wc_price($price) . '</del>  <ins>' . wc_price($discounted_price) . '</ins></p>';
        }
        echo '</div>';
    }
}

2. Подключаем функцию к странице товара через хук WooCommerce

Вставьте вывод функции после описания товара, используя хук woocommerce_after_single_product_summary с приоритетом 15, чтобы не мешать стандартным блокам:

add_action( 'woocommerce_after_single_product_summary', 'gp_custom_product_template_content', 15 );

3. Добавляем стили для кастомного блока

Чтобы выделить блок для зарегистрированных пользователей, добавьте CSS в файл стилей дочерней темы или через Customizer:

.gp-logged-in-info {
    background-color: #eaf8ff;
    border: 1px solid #0073aa;
    padding: 15px;
    margin-top: 20px;
    border-radius: 5px;
    font-size: 16px;
    color: #004a7f;
}

Проверка результата после внедрения

1. Зайдите на страницу товара как гость — блок с персональными скидками не должен отображаться.
2. Авторизуйтесь под зарегистрированным пользователем и откройте ту же страницу товара — блок с предложением и ценой должен появиться.
3. Используйте инструменты разработчика (DevTools) для проверки наличия блока .gp-logged-in-info и корректности стилей.

Частые ошибки и как их исправить

  • Блок не отображается для залогиненных пользователей: проверьте, что функция подключена через add_action и что is_user_logged_in() возвращает true.
  • Код добавлен в основной файл темы GeneratePress: это опасно, измените код в дочерней теме или через плагин, чтобы не потерять изменения при обновлении.
  • Стили не применяются: убедитесь, что CSS правильно загружается, нет конфликтов с другими стилями, и в классе нет опечаток.
  • Цена не меняется: проверьте, что глобальный объект $product доступен, и используйте корректные методы WooCommerce (get_price(), wc_price()).

Практические советы по безопасности и производительности

  • Код с проверкой is_user_logged_in() не влияет на производительность сайта, но избегайте тяжелых запросов в этой функции.
  • Для более сложных сценариев используйте transient API для кеширования персональных данных, если они подтягиваются из базы.
  • Включайте кастомный функционал через дочернюю тему или плагин, чтобы избежать потери при обновлениях.
  • Проверяйте совместимость с плагинами WooCommerce и GeneratePress после обновлений.

Сравнение вариантов реализации кастомизации страницы товара

МетодОписаниеПлюсыМинусы
Хуки WooCommerce + условие is_user_logged_in()Добавление кастомного блока через actionПростота, не требует копирования шаблонов, совместимостьОграниченная кастомизация шаблона, подходит для вывода доп. информации
Перегрузка шаблона single-product.php в дочерней темеПолная замена шаблона для разного типа пользователейПолный контроль над разметкойСложность поддержки, риск конфликтов при обновлениях WooCommerce
Использование плагинов кастомизации WooCommerceГрафические настройки и условия показаУдобство без кодаНагрузка, ограниченная гибкость, зависимость от плагина
WooCommerce: как изменить URL страницы товара после покупки в GeneratePress
05.05.2026
Как добавить кастомный функционал в GeneratePress через хуки и фильтры
21.03.2026
Как добавить динамические строки в GeneratePress для улучшения функционала сайта
01.11.2025
Как добавить поддержку JavaScript-модулей в GeneratePress для улучшения производительности
07.04.2026
Как удалить ненужные CSS и JS файлы в GeneratePress для оптимизации скорости
27.01.2026