Решение проблемы несинхронизированных статусов заказов WooCommerce и LearnPress

Диагностика проблемы с несинхронизированными статусами заказов

Одной из частых проблем при интеграции LearnPress с WooCommerce является рассинхронизация статусов заказов. Например, заказ в WooCommerce может иметь статус "Завершён", а курс в LearnPress автоматически не активируется, или наоборот — курс активирован, но заказ в WooCommerce «в ожидании оплаты».

Причины могут быть следующими:

  • Отсутствие или некорректная работа обработчиков webhook или хуков, синхронизирующих статусы.
  • Кэширование, которое задерживает обновление статусов.
  • Конфликты с другими плагинами, изменяющими логику статусов WooCommerce или LearnPress.
  • Ошибки в коде кастомных интеграций.

Как проверить проблему

Для диагностики выполните следующие шаги:

  1. В админке WooCommerce перейдите в WooCommerce > Заказы, найдите проблемный заказ и проверьте его статус.
  2. В LearnPress откройте профиль пользователя и проверьте статус курса — активирован или нет.
  3. Включите отладку логов WooCommerce: WooCommerce > Статус > Логи, проверьте наличие ошибок при обновлении заказов.
  4. Активируйте режим отладки WordPress (define('WP_DEBUG', true); в wp-config.php) и посмотрите, появляются ли ошибки при смене статуса заказа.

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

Основная идея — вручную добавить обработчик, который будет слушать изменения статуса заказов WooCommerce и обновлять статусы пользователей в LearnPress.

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

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

add_action('woocommerce_order_status_completed', 'lp_sync_order_status_completed', 10, 1);
function lp_sync_order_status_completed($order_id) {
    if (!$order_id) {
        return;
    }
    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }

    // Получаем ID пользователя
    $user_id = $order->get_user_id();
    if (!$user_id) {
        return;
    }

    // Получаем элементы заказа
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();

        // Проверяем, что продукт - курс LearnPress
        if (get_post_type($product_id) !== 'lp_course') {
            continue;
        }

        // Активируем курс для пользователя
        learn_press_update_user_course_status($user_id, $product_id, 'enrolled');
    }
}

Этот код автоматически ставит статус "enrolled" (записан) для курсов, купленных и оплаченных в WooCommerce, при смене заказа на статус completed.

2. Обратная синхронизация статусов (опционально)

Если необходимо обновлять статус заказа WooCommerce при изменении статуса курса в LearnPress, используйте хук LearnPress:

add_action('learn-press/course-status-changed', 'update_woocommerce_order_status_based_on_course', 10, 3);
function update_woocommerce_order_status_based_on_course($user_id, $course_id, $new_status) {
    // Получаем связанные заказы пользователя для данного курса
    $orders = wc_get_orders(array(
        'customer_id' => $user_id,
        'limit'       => -1,
    ));

    foreach ($orders as $order) {
        foreach ($order->get_items() as $item) {
            if ($item->get_product_id() == $course_id) {
                // Обновляем статус заказа, например, на completed
                $order->update_status('completed');
            }
        }
    }
}

Обратите внимание, что этот код служит примером и требует адаптации под специфику вашего проекта.

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

Чтобы убедиться, что синхронизация работает:

  • Создайте тестовый заказ в WooCommerce с продуктом LearnPress (курс).
  • Установите статус заказа в completed.
  • Проверьте профиль пользователя в LearnPress — курс должен быть активирован (статус "enrolled").
  • Обратная проверка: измените статус курса в LearnPress и убедитесь, что статус заказа WooCommerce обновляется при применении второго кода.

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

  • Нет активации курса после оплаты: убедитесь, что в WooCommerce продукт действительно связан с курсом LearnPress (тип поста lp_course).
  • Функция learn_press_update_user_course_status не найдена: проверьте, что LearnPress активен и функция доступна. В случае отсутствия — используйте LearnPress API для записи статуса.
  • Заказы не обновляются автоматически: проверьте, нет ли конфликтов с другими плагинами, отключите кэширование на время тестирования.
  • Ошибки PHP при выполнении кода: проверьте синтаксис и наличие всех параметров функций.

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

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

Сравнение вариантов решения синхронизации статусов WooCommerce и LearnPress

МетодОписаниеПлюсыМинусы
Стандартная интеграция LearnPress + WooCommerceИспользование встроенной поддержки LearnPress для WooCommerceПростота настройки, поддержка официальных обновленийИногда сбои в обновлении статусов, мало кастомизации
Кастомные хуки и фильтры (код из статьи)Добавление собственного кода для синхронизации статусовГибкость, можно адаптировать под задачиТребует навыков разработки, возможны ошибки
Использование плагинов сторонних разработчиковПлагины для интеграции LearnPress и WooCommerceБыстрая установка, готовые решенияМогут быть несовместимы или устаревшими

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать уникальные проверки в Quizle для LearnPress: практические примеры и код
20.01.2026
Как добавить предварительный просмотр урока в LearnPress: практическое руководство с примерами кода
13.02.2026
Как автоматизировать создание курсов в LearnPress через импорт CSV
08.04.2026
Как решить проблему необновления статуса сохранённого заказа WooCommerce в LearnPress
28.04.2026
Решение проблемы необновления статуса заказа WooCommerce в LearnPress
21.04.2026
×
Quizle
Привлекайте, конвертируйте, зарабатывайте!
-15%

на премиум плагин WordPress

Получить скидку ⋙