Как решить проблему необновления статусов возврата платежа WooCommerce в LearnPress

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

В интеграции WooCommerce и LearnPress часто возникает ситуация, когда возврат платежа в WooCommerce не отражается в статусе заказа курса LearnPress. Это приводит к тому, что пользователи сохраняют доступ к платному курсу после возврата денег, что недопустимо.

Основные признаки проблемы:

  • В WooCommerce заказ отмечен как «Возврат» или «Refunded»;
  • В LearnPress статус заказа остается «Оплачен» или «Завершен»;
  • Пользователь продолжает иметь доступ к курсу после возврата.

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

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

1. Создайте функцию для отслеживания статуса заказа WooCommerce

Для этого используйте хук woocommerce_order_status_refunded, который срабатывает при возврате платежа:

add_action('woocommerce_order_status_refunded', 'lp_sync_order_status_refund', 10, 1);
function lp_sync_order_status_refund($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Получаем связанные курсы LearnPress
    $items = $order->get_items();
    foreach ($items as $item) {
        $product_id = $item->get_product_id();
        // Проверяем, что товар - курс LearnPress
        if (learn_press_is_course($product_id)) {
            // Получаем заказ LearnPress для пользователя и курса
            $user_id = $order->get_user_id();
            $lp_order = LP_Order_DB::get_order_by_course_and_user($product_id, $user_id);
            if ($lp_order) {
                // Обновляем статус заказа LearnPress на 'refunded' или 'canceled'
                $lp_order->update_status('refunded');
            }
        }
    }
}

Обратите внимание, что функция LP_Order_DB::get_order_by_course_and_user — часть LearnPress для поиска заказа по курсу и пользователю, а метод update_status обновляет статус.

2. Проверка корректности статусов LearnPress

По умолчанию LearnPress не имеет статуса refunded. Можно использовать статус cancelled или добавить свой статус. Для добавления статуса воспользуйтесь следующим кодом:

add_filter('learn-press/order-statuses', function($statuses) {
    $statuses['refunded'] = array(
        'label' => __('Возврат', 'learnpress'),
        'public' => false,
        'exclude_from_order_count' => true
    );
    return $statuses;
});

После этого в функции обновления статуса используйте 'refunded'.

3. Автоматически отзываем доступ к курсу

Обновление статуса заказа LearnPress на возврат должно автоматически отзывать доступ к курсу. Если это не происходит, добавьте вызов удаления доступа вручную:

if ($lp_order) {
    $lp_order->update_status('refunded');
    // Отзываем доступ
    $user_id = $order->get_user_id();
    $course = learn_press_get_course($product_id);
    if ($course) {
        LP_User_Items::instance()->delete_item($user_id, $course->get_id());
    }
}

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

  1. Сделайте тестовый заказ курса через WooCommerce и оплатите.
  2. Верните деньги через WooCommerce, установив статус заказа в «Refunded».
  3. Проверьте, что статус заказа LearnPress изменился на «Возврат» (refunded/cancelled).
  4. Проверьте профиль пользователя: курс должен быть недоступен, уроки и материалы — закрыты.
  5. Проверьте на стороне администратора и в отчетах LearnPress, что статус заказа обновлен корректно.

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

  • Статус LearnPress не меняется: проверьте, что хук woocommerce_order_status_refunded подключен и срабатывает. Добавьте логирование или error_log внутри функции.
  • Функции LearnPress не доступны: убедитесь, что код размещён в правильном месте (functions.php или плагине) и LearnPress загружен до выполнения кода.
  • Доступ к курсу не отзывается: вызов LP_User_Items::instance()->delete_item() должен удалять доступ. Проверьте, что переданные ID курсов и пользователя корректны.
  • Проблемы с кэшированием: очистите кеш сайта и браузера после тестов, чтобы увидеть актуальные изменения.

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

  • Используйте nonce и проверку прав пользователя, если расширяете функционал управления заказами.
  • Минимизируйте количество запросов к базе, используя кэширование результатов поиска заказов LearnPress.
  • Логируйте изменения статусов для диагностики и аудита.
  • Тестируйте интеграцию на staging-сервере перед внедрением в продакшен.

Сравнение вариантов решения

МетодПреимуществаНедостатки
Использование хука woocommerce_order_status_refunded и обновление статуса LearnPressПрямое решение, автоматическое обновление, отзыв доступаТребует ручной настройки, знание API LearnPress
Ручное обновление статусов через админку LearnPressПростота, не требует кодаЧеловеческий фактор, ошибки, неудобство при большом количестве заказов
Использование сторонних плагинов синхронизации WooCommerce и LearnPressГотовые решения, поддержкаВозможны конфликты, зависимость от обновлений, лицензии

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

⭐⭐⭐⭐⭐
Как использовать Webhooks в LearnPress для автоматизации процессов
24.02.2026
Как добавить предварительный просмотр урока в LearnPress: практическое руководство с примерами кода
13.02.2026
Как сделать отсрочку оплаты в LearnPress: пошаговое решение с примерами кода
29.12.2025
Как добавить персонализированные уведомления в LearnPress на WordPress
17.01.2026
Решение проблемы с несоответствием цен в LearnPress и WooCommerce
18.04.2026
×
Quizle
Привлекайте, конвертируйте, зарабатывайте!
-15%

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

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