You've already forked wc-licensed-product
Add licensed variable product support for duration-based licenses (v0.5.3)
Customers can now purchase licenses with different durations (monthly, yearly, lifetime) through WooCommerce product variations. Each variation can have its own license validity settings. New features: - LicensedVariableProduct class for variable licensed products - LicensedProductVariation class for individual variations - Per-variation license duration and max activations settings - Duration labels in checkout (Monthly, Quarterly, Yearly, etc.) - Full support for WooCommerce Blocks checkout with variations - Updated translations for German (de_CH) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -227,23 +227,35 @@ final class Plugin
|
||||
$orderId = $order->get_id();
|
||||
$customerId = $order->get_customer_id();
|
||||
|
||||
// Index domains by product ID for quick lookup
|
||||
// Index domains by product ID (and variation ID for variable products)
|
||||
$domainsByProduct = [];
|
||||
foreach ($domainData as $item) {
|
||||
if (isset($item['product_id']) && isset($item['domains']) && is_array($item['domains'])) {
|
||||
$domainsByProduct[(int) $item['product_id']] = $item['domains'];
|
||||
$productId = (int) $item['product_id'];
|
||||
$variationId = isset($item['variation_id']) ? (int) $item['variation_id'] : 0;
|
||||
$key = $variationId > 0 ? "{$productId}_{$variationId}" : (string) $productId;
|
||||
$domainsByProduct[$key] = [
|
||||
'domains' => $item['domains'],
|
||||
'variation_id' => $variationId,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Generate licenses for each licensed product
|
||||
foreach ($order->get_items() as $item) {
|
||||
$product = $item->get_product();
|
||||
if (!$product || !$product->is_type('licensed')) {
|
||||
if (!$product || !$this->licenseManager->isLicensedProduct($product)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$productId = $product->get_id();
|
||||
$domains = $domainsByProduct[$productId] ?? [];
|
||||
// Get the parent product ID (for variations, this is the main product)
|
||||
$productId = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
|
||||
$variationId = $item->get_variation_id();
|
||||
|
||||
// Look up domains - first try with variation, then without
|
||||
$key = $variationId > 0 ? "{$productId}_{$variationId}" : (string) $productId;
|
||||
$domainInfo = $domainsByProduct[$key] ?? $domainsByProduct[(string) $productId] ?? null;
|
||||
$domains = $domainInfo['domains'] ?? [];
|
||||
|
||||
// Generate a license for each domain
|
||||
foreach ($domains as $domain) {
|
||||
@@ -252,7 +264,8 @@ final class Plugin
|
||||
$orderId,
|
||||
$productId,
|
||||
$customerId,
|
||||
$domain
|
||||
$domain,
|
||||
$variationId > 0 ? $variationId : null
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -271,12 +284,17 @@ final class Plugin
|
||||
|
||||
foreach ($order->get_items() as $item) {
|
||||
$product = $item->get_product();
|
||||
if ($product && $product->is_type('licensed')) {
|
||||
if ($product && $this->licenseManager->isLicensedProduct($product)) {
|
||||
// Get the parent product ID (for variations, this is the main product)
|
||||
$productId = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
|
||||
$variationId = $item->get_variation_id();
|
||||
|
||||
$this->licenseManager->generateLicense(
|
||||
$order->get_id(),
|
||||
$product->get_id(),
|
||||
$productId,
|
||||
$order->get_customer_id(),
|
||||
$domain
|
||||
$domain,
|
||||
$variationId > 0 ? $variationId : null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user