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

В чем заключается задача и зачем менять роль после первой покупки

В WooCommerce часто возникает задача автоматически изменить роль пользователя после совершения первой покупки. Например, из стандартного "Customer" перевести его в роль "VIP" или "Премиум-клиент" для предоставления дополнительных возможностей, скидок или доступа к закрытому контенту.

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

Диагностика проблемы: почему стандартный WooCommerce не меняет роль

По умолчанию WooCommerce не меняет роль пользователя после покупки — роль остается той, что была при регистрации, чаще всего "Customer". Если на сайте требуется иная логика, придется реализовать её самостоятельно.

Проверить текущую роль пользователя можно в админке WordPress в разделе "Пользователи" или программно:

$user = wp_get_current_user();
var_dump($user->roles);

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

Пошаговое решение: как программно изменить роль после первой покупки

1. Создаем функцию, которая проверит количество покупок пользователя

function wpa_check_first_order_and_change_role($order_id) {
    if (! $order_id) return;

    $order = wc_get_order($order_id);
    $user_id = $order->get_user_id();
    if (! $user_id) return; // гость

    // Получаем количество завершенных заказов пользователя
    $customer_orders = wc_get_orders(array(
        'customer' => $user_id,
        'status' => 'completed',
        'limit' => -1
    ));

    // Если это первая покупка (текущий заказ единственный)
    if (count($customer_orders) === 1) {
        $user = new WP_User($user_id);
        // Меняем роль, например, на "vip_customer"
        $user->set_role('vip_customer');
    }
}

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

add_action('woocommerce_order_status_completed', 'wpa_check_first_order_and_change_role', 10, 1);

Этот хук срабатывает при смене статуса заказа на "завершен" — лучшее время для смены роли.

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

  • Оформите новый заказ с аккаунта тестового пользователя;
  • Убедитесь, что после смены статуса заказа на "завершен" у пользователя изменилась роль на "vip_customer";
  • Проверьте роль в админке WordPress в разделе "Пользователи";
  • Для дополнительной проверки можно вывести роль на сайте через wp_get_current_user()->roles;
  • Если роль не меняется, проверьте, что заказ действительно статус "completed" и пользователь авторизован.

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

  • Роль не меняется: проверьте, что функция подключена к правильному хуку woocommerce_order_status_completed и что заказ действительно меняет статус на "завершен".
  • Пользователь не авторизован: если заказ сделан гостем (без регистрации), $order->get_user_id() вернет 0 — роль сменить не получится.
  • Роль не существует: убедитесь, что роль "vip_customer" зарегистрирована в WordPress, иначе смена роли не сработает.
  • Несоответствие статусов заказов: в коде фильтруются только заказы со статусом "completed" — если ваш магазин использует другие статусы, адаптируйте код.

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

  • Для добавления новой роли используйте функцию add_role() в файле плагина или functions.php темы, чтобы избежать ошибок.
  • Не переусердствуйте с количеством запросов к базе — wc_get_orders с параметром limit = -1 может быть затратным на больших магазинах. Для оптимизации можно использовать прямой SQL-запрос подсчета заказов.
  • Обрабатывайте только заказы со статусом "completed" для надежности — это гарантирует, что оплата прошла успешно.
  • Добавьте проверку nonce и capability, если расширяете функционал для админ-панели.

Альтернативы: плагины vs кастомный код

ВариантПлюсыМинусыКогда использовать
Кастомный кодМаксимальная гибкость, нет дополнительных плагиновНужны знания PHP, поддержка на владельце сайтаЕсли нужны нестандартные роли и логика
Плагин "User Role Editor" или "WooCommerce Role Based Pricing"Простая настройка, готовые решенияМожет влиять на производительность, ограниченная кастомизацияДля стандартных сценариев смены ролей и скидок
Ограничение количества попыток входа в WordPress: создание кастомного плагина
03.01.2026
WordPress авторизация через LDAP: настройка и примеры кода
07.03.2026
WordPress кастомные сообщения об ошибках при входе: настройка и примеры
01.12.2025
Как отключить REST API для неавторизованных пользователей в WordPress
18.01.2026
WordPress регистрация без подтверждения по Email: как реализовать и зачем
03.02.2026