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:
@@ -100,6 +100,9 @@ final class StoreApiExtension
|
||||
'product_id' => [
|
||||
'type' => 'integer',
|
||||
],
|
||||
'variation_id' => [
|
||||
'type' => 'integer',
|
||||
],
|
||||
'domains' => [
|
||||
'type' => 'array',
|
||||
'items' => [
|
||||
@@ -162,6 +165,7 @@ final class StoreApiExtension
|
||||
}
|
||||
|
||||
$productId = (int) $item['product_id'];
|
||||
$variationId = isset($item['variation_id']) ? (int) $item['variation_id'] : 0;
|
||||
$domains = [];
|
||||
|
||||
foreach ($item['domains'] as $domain) {
|
||||
@@ -172,10 +176,17 @@ final class StoreApiExtension
|
||||
}
|
||||
|
||||
if (!empty($domains)) {
|
||||
$normalized[] = [
|
||||
$entry = [
|
||||
'product_id' => $productId,
|
||||
'domains' => $domains,
|
||||
];
|
||||
|
||||
// Include variation_id if present
|
||||
if ($variationId > 0) {
|
||||
$entry['variation_id'] = $variationId;
|
||||
}
|
||||
|
||||
$normalized[] = $entry;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,10 +278,23 @@ final class StoreApiExtension
|
||||
// Check for licensed_domains in classic format (from DOM injection)
|
||||
if (empty($domainData) && isset($requestData['licensed_domains']) && is_array($requestData['licensed_domains'])) {
|
||||
$domainData = [];
|
||||
foreach ($requestData['licensed_domains'] as $productId => $domains) {
|
||||
$variationIds = $requestData['licensed_variation_ids'] ?? [];
|
||||
|
||||
foreach ($requestData['licensed_domains'] as $key => $domains) {
|
||||
if (!is_array($domains)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Parse key - could be "productId" or "productId_variationId"
|
||||
$parts = explode('_', (string) $key);
|
||||
$productId = (int) $parts[0];
|
||||
$variationId = isset($parts[1]) ? (int) $parts[1] : 0;
|
||||
|
||||
// Also check for hidden variation ID field
|
||||
if ($variationId === 0 && isset($variationIds[$key])) {
|
||||
$variationId = (int) $variationIds[$key];
|
||||
}
|
||||
|
||||
$normalizedDomains = [];
|
||||
foreach ($domains as $domain) {
|
||||
$sanitized = sanitize_text_field($domain);
|
||||
@@ -279,10 +303,16 @@ final class StoreApiExtension
|
||||
}
|
||||
}
|
||||
if (!empty($normalizedDomains)) {
|
||||
$domainData[] = [
|
||||
'product_id' => (int) $productId,
|
||||
$entry = [
|
||||
'product_id' => $productId,
|
||||
'domains' => $normalizedDomains,
|
||||
];
|
||||
|
||||
if ($variationId > 0) {
|
||||
$entry['variation_id'] = $variationId;
|
||||
}
|
||||
|
||||
$domainData[] = $entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user