fix: add more hooks for license generation on order completion
- Added woocommerce_payment_complete hook - Added woocommerce_thankyou hook for COD/virtual orders - Added is_virtual_order helper to detect virtual-only orders - generate_licenses_for_order now called from multiple hooks (safe due to license_exists_for_order_item check)
This commit is contained in:
@@ -27,9 +27,46 @@ class LicenseManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hook into order completion
|
// Hook into order completion - multiple hooks to catch all scenarios
|
||||||
add_action('woocommerce_order_status_completed', [__CLASS__, 'generate_licenses_for_order']);
|
add_action('woocommerce_order_status_completed', [__CLASS__, 'generate_licenses_for_order']);
|
||||||
add_action('woocommerce_order_status_processing', [__CLASS__, 'generate_licenses_for_order']);
|
add_action('woocommerce_order_status_processing', [__CLASS__, 'generate_licenses_for_order']);
|
||||||
|
add_action('woocommerce_payment_complete', [__CLASS__, 'generate_licenses_for_order']);
|
||||||
|
|
||||||
|
// Also hook into thank you page for COD/pending orders (with lower priority)
|
||||||
|
add_action('woocommerce_thankyou', [__CLASS__, 'maybe_generate_on_thankyou'], 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maybe generate licenses on thank you page (for COD and pending orders)
|
||||||
|
*/
|
||||||
|
public static function maybe_generate_on_thankyou($order_id) {
|
||||||
|
if (!$order_id) return;
|
||||||
|
|
||||||
|
$order = wc_get_order($order_id);
|
||||||
|
if (!$order) return;
|
||||||
|
|
||||||
|
// Only generate for orders that didn't already get licenses via status hooks
|
||||||
|
// Check if it's a virtual-only order that might skip payment completion
|
||||||
|
$needs_payment = $order->needs_payment();
|
||||||
|
$is_virtual = self::is_virtual_order($order);
|
||||||
|
|
||||||
|
// Generate if: virtual order OR already paid (processing/completed)
|
||||||
|
if ($is_virtual || in_array($order->get_status(), ['processing', 'completed'])) {
|
||||||
|
self::generate_licenses_for_order($order_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if order contains only virtual items
|
||||||
|
*/
|
||||||
|
private static function is_virtual_order($order) {
|
||||||
|
foreach ($order->get_items() as $item) {
|
||||||
|
$product = $item->get_product();
|
||||||
|
if ($product && !$product->is_virtual()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user