Почему важно менять роль пользователя после первой покупки в 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 + кастомная функция |