You've already forked wc-tier-and-package-prices
Release version 1.1.3 - Cart quantity visibility fix
Fixed persistent cart quantity input visibility issues for products with package quantity restrictions. Enhanced implementation ensures quantity inputs are properly hidden in both main cart and mini-cart/sidebar. Fixes: - Cart quantity inputs now properly hidden with increased filter priority - Mini-cart quantity inputs correctly replaced with read-only text - Added fallback CSS injection to handle theme/plugin conflicts - Enhanced DOM targeting with data attributes and multiple CSS selectors Technical Changes: - Increased filter priority to 999 for woocommerce_cart_item_quantity - Added woocommerce_widget_cart_item_quantity filter for mini-cart support - Added add_cart_quantity_css() method for dynamic CSS injection - Added maybe_hide_mini_cart_quantity_input() method - Enhanced quantity spans with data-product-id attribute - Added wc-tpp-restricted-qty CSS class - Implemented sibling (+) and general sibling (~) CSS selectors Updated Files: - includes/class-wc-tpp-cart.php (enhanced with mini-cart support) - wc-tier-and-package-prices.php (version 1.1.3) - composer.json (version 1.1.3) - CHANGELOG.md (v1.1.3 section) - All translation files (.pot, .po, .mo) updated to version 1.1.3 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,9 @@ class WC_TPP_Cart {
|
||||
add_filter('woocommerce_cart_item_price', array($this, 'display_cart_item_price'), 10, 3);
|
||||
add_filter('woocommerce_cart_item_subtotal', array($this, 'display_cart_item_subtotal'), 10, 3);
|
||||
add_filter('woocommerce_add_to_cart_validation', array($this, 'validate_package_quantity'), 10, 3);
|
||||
add_filter('woocommerce_cart_item_quantity', array($this, 'maybe_hide_cart_quantity_input'), 10, 3);
|
||||
add_filter('woocommerce_cart_item_quantity', array($this, 'maybe_hide_cart_quantity_input'), 999, 3);
|
||||
add_filter('woocommerce_widget_cart_item_quantity', array($this, 'maybe_hide_mini_cart_quantity_input'), 999, 3);
|
||||
add_action('wp_head', array($this, 'add_cart_quantity_css'));
|
||||
}
|
||||
|
||||
public function apply_tier_package_pricing($cart) {
|
||||
@@ -151,11 +153,66 @@ class WC_TPP_Cart {
|
||||
|
||||
// If restriction is enabled and packages exist, show quantity as text only
|
||||
if (($global_restrict || $product_restrict) && !empty($packages)) {
|
||||
return sprintf('<span class="wc-tpp-cart-quantity">%s</span>', $cart_item['quantity']);
|
||||
return sprintf('<span class="wc-tpp-cart-quantity wc-tpp-restricted-qty" data-product-id="%d">%s</span>',
|
||||
$product_id,
|
||||
$cart_item['quantity']
|
||||
);
|
||||
}
|
||||
|
||||
return $product_quantity;
|
||||
}
|
||||
|
||||
public function maybe_hide_mini_cart_quantity_input($product_quantity, $cart_item, $cart_item_key) {
|
||||
$product_id = $cart_item['product_id'];
|
||||
|
||||
// Check if restriction is enabled globally or for this product
|
||||
$global_restrict = get_option('wc_tpp_restrict_package_quantities', 'no') === 'yes';
|
||||
$product_restrict = get_post_meta($product_id, '_wc_tpp_restrict_to_packages', true) === 'yes';
|
||||
|
||||
// Get packages for this product
|
||||
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
||||
|
||||
// If restriction is enabled and packages exist, show quantity as text only
|
||||
if (($global_restrict || $product_restrict) && !empty($packages)) {
|
||||
return sprintf('<span class="wc-tpp-cart-quantity wc-tpp-restricted-qty" data-product-id="%d">%s ×</span>',
|
||||
$product_id,
|
||||
$cart_item['quantity']
|
||||
);
|
||||
}
|
||||
|
||||
return $product_quantity;
|
||||
}
|
||||
|
||||
public function add_cart_quantity_css() {
|
||||
// Get all cart items and check which products have restrictions
|
||||
if (!WC()->cart) {
|
||||
return;
|
||||
}
|
||||
|
||||
$restricted_products = array();
|
||||
foreach (WC()->cart->get_cart() as $cart_item) {
|
||||
$product_id = $cart_item['product_id'];
|
||||
$global_restrict = get_option('wc_tpp_restrict_package_quantities', 'no') === 'yes';
|
||||
$product_restrict = get_post_meta($product_id, '_wc_tpp_restrict_to_packages', true) === 'yes';
|
||||
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
||||
|
||||
if (($global_restrict || $product_restrict) && !empty($packages)) {
|
||||
$restricted_products[] = $product_id;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($restricted_products)) {
|
||||
echo '<style type="text/css">';
|
||||
foreach ($restricted_products as $product_id) {
|
||||
// Hide quantity inputs for restricted products in cart
|
||||
echo '.cart_item .wc-tpp-restricted-qty[data-product-id="' . esc_attr($product_id) . '"] + .quantity,';
|
||||
echo '.cart_item .wc-tpp-restricted-qty[data-product-id="' . esc_attr($product_id) . '"] ~ .quantity,';
|
||||
echo '.woocommerce-mini-cart-item .wc-tpp-restricted-qty[data-product-id="' . esc_attr($product_id) . '"] + .quantity,';
|
||||
echo '.woocommerce-mini-cart-item .wc-tpp-restricted-qty[data-product-id="' . esc_attr($product_id) . '"] ~ .quantity { display: none !important; }';
|
||||
}
|
||||
echo '</style>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new WC_TPP_Cart();
|
||||
|
||||
Reference in New Issue
Block a user