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

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

Многие разработчики и администраторы сайтов на WordPress с интеграцией LearnPress и WooCommerce сталкиваются с проблемой: при возврате платежа в WooCommerce статус заказа меняется, но LearnPress не обновляет статус пользователя курса. Это приводит к ситуации, когда пользователь продолжает иметь доступ к курсу несмотря на возврат денег.

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

  • Активна ли интеграция LearnPress с WooCommerce (проверить настройки плагина LearnPress → Интеграции);
  • Проверить, обновляется ли статус заказа в WooCommerce корректно (например, «refunded»);
  • Отсутствуют ли ошибки в логах WordPress (wp-content/debug.log) при изменении статуса заказа;
  • Проверить, срабатывают ли хуки WooCommerce при возврате платежа (например, woocommerce_order_status_refunded);
  • Убедиться, что LearnPress слушает эти хуки и корректно обрабатывает их.

Инструменты для проверки хуков WooCommerce

Для проверки, вызывается ли нужный хук, можно добавить временный отладочный код в файл functions.php темы или в кастомный плагин:

add_action('woocommerce_order_status_refunded', function($order_id) {
    error_log('Order refunded: ' . $order_id);
});

После возврата платежа проверьте файл wp-content/debug.log. Если запись появилась, значит хук срабатывает корректно.

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

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

1. Добавление обработчика хука возврата платежа

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

add_action('woocommerce_order_status_refunded', 'lp_sync_refund_status_with_learnpress', 10, 1);

function lp_sync_refund_status_with_learnpress($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }

    // Получаем все курсы, связанные с заказом
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        // Проверяем, является ли товар курсом LearnPress
        if (learn_press_is_course($product_id)) {
            $user_id = $order->get_user_id();
            if (!$user_id) {
                continue;
            }
            // Отменяем подписку/доступ пользователя к курсу
            learn_press_update_user_course_status($user_id, $product_id, 'cancelled');
        }
    }
}

2. Объяснение кода

  • Хук woocommerce_order_status_refunded вызывается при возврате платежа.
  • Функция получает объект заказа.
  • Перебирает все товары внутри заказа, проверяя, является ли товар курсом LearnPress.
  • Если да, то получает ID пользователя и меняет статус курса на cancelled, что лишает доступа.

3. Дополнительная проверка и логирование

Для отладки можно добавить запись в лог, чтобы убедиться, что функция срабатывает:

error_log("LearnPress refund sync: user {$user_id} course {$product_id} set to cancelled");

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

  • Сделайте тестовый заказ курса в WooCommerce.
  • Выполните возврат платежа через админ-панель WooCommerce.
  • Проверьте, что статус заказа сменился на «refunded».
  • Войдите под пользователем курса и убедитесь, что доступ к курсу закрыт (статус курса в LearnPress «cancelled»).
  • Проверьте файл логов на наличие сообщений из функции (если добавляли логирование).

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

  • Ошибка: Функция learn_press_update_user_course_status не существует.
    Решение: Проверьте версию LearnPress и его API. В некоторых версиях функция может отсутствовать. Можно использовать альтернативный способ обновления статуса через WP_User_Meta или кастомные запросы.
  • Ошибка: $order->get_user_id() возвращает 0.
    Решение: Если заказ сделан гостем, связь с пользователем отсутствует. В этом случае автоматическое обновление статуса курса невозможно без дополнительной логики по сопоставлению email или другого идентификатора.
  • Ошибка: Пользователь продолжает иметь доступ к курсу после возврата.
    Решение: Проверьте, что LearnPress слушает статус cancelled и корректно ограничивает доступ. Если нет, потребуется дополнительно реализовать логику ограничения доступа.

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

  • Добавляйте обработчики статусов только для необходимых событий, чтобы не нагружать сайт лишними вызовами.
  • Используйте встроенный логгер WordPress через error_log только для отладки, отключайте в продакшене.
  • При работе с возвратами и доступом к курсам важно, чтобы права пользователя корректно синхронизировались, иначе возможны утечки контента.
  • Рекомендуется протестировать решение на тестовом окружении перед внедрением на живой сайт.

Сравнение вариантов решения проблемы

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

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

⭐⭐⭐⭐⭐
Кастомизация полей формы регистрации в LearnPress с использованием WPRemark
03.03.2026
Как сделать автосохранение прогресса курса в LearnPress на WordPress
31.01.2026
Как сделать автоматический резерв курсов в LearnPress на WordPress
02.04.2026
Как удалить неиспользуемые курсы в LearnPress без потери данных
17.02.2026
Как решить проблему необновления статуса сохранённого заказа WooCommerce в LearnPress
28.04.2026
×
Quizle
Привлекайте, конвертируйте, зарабатывайте!
-15%

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

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