WooCommerce: как автоматически изменить стоимость товара после регистрации пользователя

Диагностика задачи: зачем менять цену после регистрации

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

Как WooCommerce хранит и выводит цены

По умолчанию WooCommerce выводит цену, сохранённую в метаданных товара (_regular_price, _sale_price). Чтобы динамически менять цену, нужно вмешаться в процесс вычисления цены с помощью фильтра woocommerce_product_get_price и похожих. Это позволит менять цену на лету, не трогая данные в базе.

Пошаговое решение: изменение цены после регистрации

1. Проверка, авторизован ли пользователь

Для изменения цены нужно удостовериться, что пользователь вошёл в систему:

if ( is_user_logged_in() ) {
    // пользователь зарегистрирован и авторизован
}

2. Подключение фильтра для динамической цены

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

add_filter( 'woocommerce_product_get_price', 'custom_price_for_logged_in_users', 10, 2 );
add_filter( 'woocommerce_product_get_regular_price', 'custom_price_for_logged_in_users', 10, 2 );

function custom_price_for_logged_in_users( $price, $product ) {
    if ( is_user_logged_in() ) {
        // Пример: даём скидку 15% зарегистрированным пользователям
        $discount = 0.15;
        $new_price = $price * (1 - $discount);
        return wc_format_decimal( $new_price, wc_get_price_decimals() );
    }
    return $price;
}

3. Кеширование и совместимость

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

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

  • Выйдите из аккаунта и откройте страницу товара — цена должна быть без скидки.
  • Войдите в зарегистрированный аккаунт и обновите страницу товара — цена должна измениться на 15% меньше.
  • Проверьте в корзине и на странице оформления заказа, чтобы цена отражалась корректно.

Частые ошибки и способы их исправления

Ошибка 1: цена не меняется для зарегистрированного пользователя

Причина: кеширование цен или страниц. Решение: очистите кеш сайта, отключите плагины кеширования на время теста. Также проверьте, что фильтр подключён и код выполняется.

Ошибка 2: скидка применяется и для гостей

Причина: неправильная проверка is_user_logged_in() или вызов функции вне условий. Решение: убедитесь, что условие проверки пользователя используется именно внутри функции фильтра.

Ошибка 3: конфликт с плагинами цен или скидок

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

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

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

Сравнение методов изменения цены в WooCommerce

МетодОписаниеПлюсыМинусы
Использование фильтров (как в статье)Динамическое изменение цены на лету через хуки WooCommerceЛегко реализовать, не требует дополнительного хранения данныхМожет конфликтовать с кешированием и другими плагинами
Изменение метаданных продуктаМенять цены напрямую в базе данных (например, после регистрации)Постоянное изменение цены, видимое во всех местахСложнее в реализации, риск ошибок и рассинхронизации
Использование плагинов скидокГотовые решения для управления скидками и ценамиМного функционала, удобство настройкиМожет быть избыточным и замедлять сайт
Как изменить календарь в Gutenberg блоках WordPress
29.03.2026
Как настроить автоматическое удаление забытых через 30 дней пользователей в WordPress
14.03.2026
Как удалить кэш в WordPress: практические методы и советы
15.01.2026
Автоматическое создание резервных копий WordPress: лучшие практики и примеры кода
22.12.2025
Как использовать REST API в WordPress для создания плагинов
24.11.2025