You've already forked wc-licensed-product
Fix stock indicator on licensed variable products (v0.5.12)
- Fixed stock indicator appearing in cart for licensed variable products - Override get_children() with direct SQL query to bypass WooCommerce type check - Override get_variation_attributes() for proper taxonomy attribute loading - Override get_variation_prices() to prevent null array errors - Override get_available_variations() with empty availability_html - Added is_type() override to pass variable type checks - Added multiple stock-related filters for comprehensive coverage - Improved isLicensedProductOrVariation() with DB-level parent type check Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -35,6 +35,61 @@ class LicensedProductVariation extends WC_Product_Variation
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Licensed products are always in stock (virtual, no inventory)
|
||||
*/
|
||||
public function is_in_stock(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get availability - empty for licensed products (no stock indicator)
|
||||
*/
|
||||
public function get_availability(): array
|
||||
{
|
||||
return [
|
||||
'availability' => '',
|
||||
'class' => '',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't manage stock for licensed products
|
||||
*/
|
||||
public function managing_stock(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if variation is purchasable
|
||||
* Override to handle custom parent product type
|
||||
*/
|
||||
public function is_purchasable(): bool
|
||||
{
|
||||
// Check if variation exists
|
||||
if (!$this->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check parent product status
|
||||
$parentId = $this->get_parent_id();
|
||||
$parentStatus = get_post_status($parentId);
|
||||
|
||||
if ($parentStatus !== 'publish' && !current_user_can('edit_post', $parentId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if variation has a price
|
||||
$price = $this->get_price();
|
||||
if ($price === '' || $price === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return apply_filters('woocommerce_variation_is_purchasable', true, $this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get max activations for this variation
|
||||
* Falls back to parent product, then to default settings
|
||||
|
||||
Reference in New Issue
Block a user