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

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

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

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

Главный вопрос — как определить, что это первая покупка? WooCommerce хранит информацию о заказах пользователя, и мы можем проверить количество завершённых заказов перед назначением новой роли.

Для диагностики проверьте, что у пользователя есть хотя бы один заказ со статусом completed или processing. Если это первый заказ, роль меняется.

Проверка количества заказов пользователя

function wpauth_get_user_completed_orders_count( $user_id ) {
    $customer_orders = wc_get_orders( array(
        'customer_id' => $user_id,
        'status'      => array('completed', 'processing'),
        'limit'       => -1,
        'return'      => 'ids',
    ) );
    return count( $customer_orders );
}

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

1. Добавляем хук на смену статуса заказа

Используем хук woocommerce_order_status_completed, который срабатывает при смене статуса заказа на completed. В обработчике проверяем количество заказов пользователя.

2. Проверяем количество заказов и меняем роль

add_action( 'woocommerce_order_status_completed', 'wpauth_change_role_after_first_order' );
function wpauth_change_role_after_first_order( $order_id ) {
    $order = wc_get_order( $order_id );
    $user_id = $order->get_user_id();

    if ( ! $user_id ) {
        return; // гость
    }

    $completed_orders_count = wpauth_get_user_completed_orders_count( $user_id );

    if ( $completed_orders_count === 1 ) {
        $user = new WP_User( $user_id );
        $user->set_role( 'customer' ); // меняем роль на "customer"
    }
}

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

  • Создайте нового пользователя и оформите заказ.
  • Убедитесь, что после смены статуса заказа на "Завершён" роль пользователя меняется на "customer" (или другую, указанную вами).
  • Для проверки можно зайти в админку WordPress → Пользователи и посмотреть роль пользователя.

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

  • Роль не меняется после первой покупки: Проверьте, что пользователь авторизован и у заказа корректный user_id. Заказы гостей не учитываются.
  • Роль меняется при каждом новом заказе: Проверьте условие if ( $completed_orders_count === 1 ), оно должно срабатывать только при первом заказе.
  • Не учитываются другие статусы заказа: По умолчанию учитываются только completed и processing. Если у вас другая логика, расширьте массив статусов в wc_get_orders.

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

  • Используйте строгое условие на количество заказов, чтобы не нагружать базу лишними запросами.
  • Обрабатывайте только заказы с авторизованными пользователями.
  • Для больших сайтов с высокой нагрузкой рассмотрите кэширование результатов подсчёта заказов.
  • Обязательно тестируйте на тестовом сайте перед выпуском в продакшен.

Таблица сравнения вариантов реализации

МетодПлюсыМинусыПример использования
Хук на смену статуса заказаНадёжно меняет роль после подтверждения оплатыНе срабатывает для заказов без смены статусаПример из статьи
Хук на создание заказаСрабатывает сразу после оформления заказаРиск смены роли до оплатыadd_action('woocommerce_thankyou', ...)
Периодический крон для проверки заказовМожно обрабатывать массовоЗадержка в смене ролиwp_schedule_event + кастомная функция
WordPress авторизация через LDAP: настройка и примеры кода
07.03.2026
WordPress авторизация с использованием WebAuthn: настройка и практические примеры
12.03.2026
WordPress авторизация через социальные сети: практические решения и примеры
25.11.2025
WordPress двухфакторная аутентификация: локальное решение с примером кода
21.12.2025
WordPress регистрация без подтверждения по Email: как реализовать и зачем
03.02.2026