Диагностика проблемы: почему стандартных статусов WooCommerce недостаточно для LearnPress
LearnPress тесно интегрирован с WooCommerce для управления оплатами и доступом к курсам. Однако стандартный набор статусов заказов WooCommerce, таких как pending, processing и completed, не всегда покрывает специфические сценарии, например, дополнительные проверки платежей, ручное подтверждение или статус возврата. Без поддержки кастомных статусов LearnPress не обновляет доступ к курсам должным образом, что приводит к ошибкам в выдаче контента.
Как проверить текущие статусы заказов WooCommerce и их обработку LearnPress
- В админке WooCommerce перейдите в «Заказы» и посмотрите список заказов с разными статусами.
- Проверьте, какие статусы отражаются в LearnPress в разделе «Студенты» и «Курсы».
- Если после смены статуса заказа доступ к курсу не меняется, значит LearnPress не связал кастомный статус.
Пошаговое решение: добавление кастомных статусов заказов и их синхронизация с LearnPress
1. Регистрируем кастомный статус заказа WooCommerce
Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:
function lp_register_custom_order_statuses() {
register_post_status( 'wc-awaiting-approval', array(
'label' => 'Ожидает одобрения',
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Ожидает одобрения <span class="count">(%s)</span>', 'Ожидает одобрения <span class="count">(%s)</span>' ),
) );
}
add_action( 'init', 'lp_register_custom_order_statuses' );
function lp_add_custom_order_statuses_to_wc( $order_statuses ) {
$order_statuses['wc-awaiting-approval'] = 'Ожидает одобрения';
return $order_statuses;
}
add_filter( 'wc_order_statuses', 'lp_add_custom_order_statuses_to_wc' );2. Связываем кастомный статус с LearnPress
LearnPress слушает изменение статусов WooCommerce, чтобы обновлять доступ к курсам. Для кастомных статусов добавьте обработчик, который триггерит синхронизацию:
function lp_sync_custom_order_status_with_learnpress( $order_id, $old_status, $new_status ) {
if ( $new_status === 'awaiting-approval' ) {
// Можно отправить уведомление администратору или инициировать ручную проверку
}
// При смене на completed или другие статусы - стандартная обработка
}
add_action( 'woocommerce_order_status_changed', 'lp_sync_custom_order_status_with_learnpress', 10, 3 );Если нужно, чтобы LearnPress учитывал ваш статус как "завершенный" для доступа к курсам, расширьте проверку в LearnPress, переопределяя функцию проверки статуса заказа или добавляя фильтр на получение статуса заказа.
Проверка результата: как убедиться, что кастомные статусы работают корректно
- Создайте тестовый заказ в WooCommerce и установите кастомный статус «Ожидает одобрения».
- Проверьте, что в админке WooCommerce этот статус отображается и доступен для выбора.
- Убедитесь, что LearnPress не предоставляет доступ к курсам при этом статусе (если это ваша логика).
- При смене статуса с кастомного на
completedпроверьте, что доступ к курсу появляется у пользователя. - Отследите логи ошибок, если используется WP_DEBUG, чтобы убедиться, что обработчик статусов без ошибок.
Частые ошибки и как их исправить
- Кастомный статус не отображается в списке заказов WooCommerce: Проверьте регистрацию статуса и фильтр
wc_order_statuses. Ошибка в ключе статуса (нужно начинать сwc-). - LearnPress не реагирует на смену кастомного статуса: Убедитесь, что вы используете правильный хук
woocommerce_order_status_changedи в обработчике вызываете нужные методы LearnPress для обновления доступа. - Пользователь получает доступ к курсу при неподходящем статусе: Проверьте логику проверки статуса в LearnPress. Возможно, нужно расширить фильтры
learn_press_order_status_completed.
Практические советы по безопасности и производительности
- Не вставляйте тяжелую логику в обработчики смены статуса – лучше отправлять задачи в очередь с помощью WP-Cron или Action Scheduler.
- Для уведомлений используйте асинхронную отправку, чтобы не замедлять процесс обновления статусов.
- Регулярно проверяйте логи ошибок и отладочную информацию при внедрении кастомных статусов.
- Избегайте прямого изменения базы данных WooCommerce и LearnPress – используйте API и хуки.
Сравнение подходов для кастомных статусов WooCommerce и LearnPress
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Регистрация кастомного статуса + слушатель смены статуса | Стандартный способ расширения WooCommerce и LearnPress | Полный контроль, официальная поддержка, интеграция | Требует навыков PHP, тестирования |
| Использование плагинов для кастомных статусов | Плагины типа "WooCommerce Order Status Manager" | Быстрое добавление без кода | Может конфликтовать с LearnPress, ограниченная кастомизация |
| Прямое изменение метаданных заказа | Хранение кастомной информации вручную | Простота реализации | Нет поддержки в UI, нестабильность, риск синхронизации |