# WooCommerce Tier and Package Prices - Release 1.1.3

**Release Date:** December 21, 2025
**Version:** 1.1.3
**Package Size:** 394 KB
**Git Tag:** v1.1.3

## Download

**File:** `wc-tier-and-package-prices-1.1.3.zip`

### Checksums

**SHA256:**
```
7938542680b71a7b73269c96a4dff78f2222ac8409092011c5e40e97a5e465aa
```

**MD5:**
```
dfec91be7e375b09613ba81cfebbe013
```

## What's New in 1.1.3

This is a **bug fix release** that resolves cart quantity input visibility issues for products with package quantity restrictions.

### Bug Fixes
- **Cart Quantity Input Visibility** - FIXED
  - Cart quantity inputs now properly hidden with increased filter priority (999)
  - Mini-cart/sidebar 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 Enhancements
- Increased filter priority from 10 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 in WC_TPP_Cart class
- Enhanced quantity spans with `data-product-id` attribute for targeted CSS
- Added `wc-tpp-restricted-qty` CSS class for improved targeting
- Implemented both sibling (+) and general sibling (~) CSS selectors for various DOM structures

## Problem Solved

**Issue:** In version 1.1.1 and 1.1.2, cart quantity inputs were still visible in the main cart and mini-cart/sidebar for products with package quantity restrictions, despite the feature being implemented.

**Root Cause:**
1. Filter priority was too low (10), allowing other plugins to override
2. Mini-cart used different filter hook (`woocommerce_widget_cart_item_quantity`)
3. Some themes/plugins had DOM structures that prevented proper hiding
4. No fallback mechanism for edge cases

**Solution:**
1. Increased filter priority to 999 to ensure execution after other plugins
2. Added separate filter for mini-cart quantity display
3. Implemented dynamic CSS injection as fallback for all edge cases
4. Used data attributes for product-specific CSS targeting
5. Applied multiple CSS selectors (sibling + general sibling) to handle DOM variations

## What's Changed

### Fixed
- Cart quantity input visibility issue in cart and cart sidebar for restricted products
- Enhanced filter priority (999) to ensure quantity hiding runs after other plugins
- Mini-cart quantity input now properly hidden for restricted products

### Added
- `woocommerce_widget_cart_item_quantity` filter support for mini-cart
- `add_cart_quantity_css()` method for dynamic CSS injection
- `data-product-id` attribute to quantity spans for targeted CSS selectors
- CSS class `wc-tpp-restricted-qty` for improved targeting

### Technical
- Increased filter priority from 10 to 999 for `woocommerce_cart_item_quantity`
- Added `maybe_hide_mini_cart_quantity_input()` method in WC_TPP_Cart class
- Dynamic CSS injection via `wp_head` action as fallback
- Used both sibling (+) and general sibling (~) CSS selectors for DOM variations

## Installation

### New Installation

1. Download the ZIP file: `wc-tier-and-package-prices-1.1.3.zip`
2. Log in to your WordPress admin panel
3. Navigate to **Plugins > Add New > Upload Plugin**
4. Choose the downloaded ZIP file
5. Click **Install Now**
6. After installation, click **Activate Plugin**
7. Go to **WooCommerce > Settings > Tier & Package Prices** to configure

### Upgrade from 1.1.2

This is a **critical bug fix release** for users experiencing cart quantity visibility issues.

**Steps:**
1. Deactivate version 1.1.2
2. Upload and activate version 1.1.3
3. All existing settings and data will be automatically preserved
4. Cart quantity inputs will now be properly hidden for restricted products
5. No additional configuration required

### Upgrade from 1.1.1 or Earlier

Safe to upgrade directly. This version includes all features from v1.1.0, v1.1.1, and v1.1.2 plus the cart quantity visibility fix.

**Steps:**
1. Deactivate the current version
2. Upload and activate version 1.1.3
3. All existing settings and data will be automatically preserved
4. Cart quantity restriction feature now works correctly across all touchpoints

### Requirements

- **WordPress:** 6.0 or higher
- **PHP:** 7.4 or higher
- **WooCommerce:** 8.0 or higher

## Complete Package Restriction Feature (v1.1.0 + v1.1.1 + v1.1.2 + v1.1.3)

The package quantity restriction feature now provides complete and reliable enforcement across all customer touchpoints:

### Catalog Pages (v1.1.2)
- ✅ "View Options" button instead of "Add to Cart" for restricted products
- ✅ Eye icon for visual distinction
- ✅ Direct link to product page
- ✅ Prevents invalid add-to-cart attempts from shop/category pages

### Product Page (v1.1.0)
- ✅ Quantity field automatically hidden when restriction enabled
- ✅ "Choose a package size below" notice displayed
- ✅ Visual package selection with highlighted states
- ✅ JavaScript validation prevents form submission without package selection

### Add to Cart Validation (v1.1.0)
- ✅ Server-side validation on add-to-cart
- ✅ User-friendly error messages showing available package sizes
- ✅ Prevents manual quantity manipulation via form fields

### Cart Page (v1.1.1 + v1.1.3 - FIXED)
- ✅ Quantity field hidden/replaced with read-only text
- ✅ Prevents cart quantity modification
- ✅ Consistent restriction enforcement
- ✅ No bypass via cart updates
- ✅ Works with all themes and plugins (high priority filters + CSS fallback)
- ✅ Mini-cart/sidebar properly handled

### Settings
- ✅ Global setting to enable restrictions site-wide
- ✅ Per-product override for individual products
- ✅ Located in: WooCommerce > Settings > Tier & Package Prices

## Technical Implementation Details

### Cart Quantity Hiding Strategy (v1.1.3)

The implementation uses a multi-layered approach to ensure reliability:

**Layer 1: Filter Replacement**
```php
// High priority (999) to run after other plugins
add_filter('woocommerce_cart_item_quantity', 'maybe_hide_cart_quantity_input', 999, 3);
add_filter('woocommerce_widget_cart_item_quantity', 'maybe_hide_mini_cart_quantity_input', 999, 3);
```

**Layer 2: HTML Replacement**
Replace quantity input with read-only span:
```php
sprintf('<span class="wc-tpp-cart-quantity wc-tpp-restricted-qty" data-product-id="%d">%s</span>',
    $product_id,
    $cart_item['quantity']
);
```

**Layer 3: CSS Fallback**
Dynamic CSS injection for edge cases:
```php
.cart_item .wc-tpp-restricted-qty[data-product-id="123"] + .quantity,
.cart_item .wc-tpp-restricted-qty[data-product-id="123"] ~ .quantity {
    display: none !important;
}
```

This three-layer approach ensures cart quantity inputs are hidden regardless of theme, plugin conflicts, or DOM structure variations.

## Modified Files in 1.1.3

### Core Files Updated
- `wc-tier-and-package-prices.php` - Version updated to 1.1.3
- `composer.json` - Version updated to 1.1.3
- `CHANGELOG.md` - Added v1.1.3 section

### PHP Classes Modified
- `includes/class-wc-tpp-cart.php` - Enhanced cart quantity hiding with:
  - Increased filter priority to 999 (lines 17-18)
  - Added `maybe_hide_mini_cart_quantity_input()` method (lines 165-184)
  - Added `add_cart_quantity_css()` method (lines 186-215)
  - Enhanced `maybe_hide_cart_quantity_input()` with data attributes (lines 144-163)

### Translation Files Updated
- `languages/wc-tier-package-prices.pot` - Version updated to 1.1.3
- `languages/wc-tier-package-prices-en_US.po` - Version updated to 1.1.3
- `languages/wc-tier-package-prices-de_DE.po` - Version updated to 1.1.3
- `languages/wc-tier-package-prices-de_CH_informal.po` - Version updated to 1.1.3
- All `.mo` files recompiled

## Complete Feature Set

### Tier Pricing
- ✅ Quantity-based discount tiers
- ✅ Automatic price calculation
- ✅ Volume discount display

### Package Pricing
- ✅ Fixed-price bundles
- ✅ Custom package labels
- ✅ Multiple package options per product
- ✅ Quantity restriction to packages only (v1.1.0)
- ✅ Cart quantity enforcement (v1.1.1 + v1.1.3 - FIXED)
- ✅ Catalog button modification (v1.1.2)

### Admin Features
- ✅ WooCommerce Settings integration
- ✅ Easy-to-use product meta boxes
- ✅ Configurable display positions
- ✅ Native WooCommerce UI
- ✅ Global restriction setting
- ✅ Per-product restriction override

### Frontend Features
- ✅ Beautiful pricing tables (Twig templates)
- ✅ Real-time cart updates
- ✅ Responsive design
- ✅ 3 languages supported
- ✅ Package-only selection mode
- ✅ Automatic quantity field hiding (product page & cart)
- ✅ Visual package selection
- ✅ Read-only cart quantity display (FIXED in v1.1.3)
- ✅ Catalog "View Options" button

### Validation & Security
- ✅ Client-side JavaScript validation
- ✅ Server-side cart validation
- ✅ Cart quantity bypass prevention (FIXED in v1.1.3)
- ✅ Catalog add-to-cart prevention
- ✅ User-friendly error messages
- ✅ WooCommerce HPOS compatible
- ✅ Theme/plugin conflict resistant (v1.1.3)

## Breaking Changes

**None.** This release is fully backward compatible with v1.1.2, v1.1.1, v1.1.0 and v1.0.x.

## Migration Notes

### From 1.1.2
- No migration needed
- Cart quantity visibility fix is automatic
- No new settings or configuration required
- **Recommendation:** Update immediately if experiencing cart quantity visibility issues

### From 1.1.1
- All v1.1.2 and v1.1.3 features included automatically
- Cart quantity hiding now works reliably
- No additional configuration needed

### From 1.1.0 or Earlier
- All v1.1.1, v1.1.2, and v1.1.3 features included automatically
- Restriction features remain disabled by default
- Must be explicitly enabled in settings

### Settings Location
All settings remain in: **WooCommerce > Settings > Tier & Package Prices**

### Data Preservation
- All existing tier pricing data preserved
- All existing package pricing data preserved
- All product meta data preserved
- No database changes required

## Known Limitations

### Current Version
1. Restriction only works when packages are defined
2. Cannot restrict to tier quantities (only packages)
3. Restriction applies to entire product (no variation-level control)
4. Cart quantity is read-only text (not a dropdown of package options)
5. "View Options" button uses standard WooCommerce button styling

### Future Enhancements
These features may be added in future versions:
- Customizable "View Options" button text
- Cart package quantity dropdown selector
- Variation-level restriction control
- Restrict to tier quantities option
- Minimum/maximum package selection limits

## Changelog Summary

### Version History
- **v1.1.3** (2025-12-21) - Cart quantity visibility bug fix
- **v1.1.2** (2025-12-21) - Catalog button modification
- **v1.1.1** (2025-12-21) - Cart quantity bypass fix
- **v1.1.0** (2025-12-21) - Package quantity restriction feature
- **v1.0.2** (2025-12-21) - WooCommerce Settings integration
- **v1.0.1** (2025-12-21) - Twig template engine integration
- **v1.0.0** (2025-12-21) - Initial release

## User Impact

### Before v1.1.3
Users could still modify quantity in cart/mini-cart despite restrictions being enabled, causing:
- Cart validation errors when updating quantities
- Confusion about why quantities could be changed in cart but not on product page
- Inconsistent user experience across different touchpoints

### After v1.1.3
- Quantity inputs consistently hidden/disabled across all cart views
- Clear read-only quantity display
- No cart update errors
- Consistent user experience
- Works reliably with all themes and plugins

## Support

- **Documentation:** See README.md and CHANGELOG.md
- **Previous Release:** See RELEASE-INFO-1.1.2.md
- **Issues:** https://src.bundespruefstelle.ch/wc-tier-package-prices/issues
- **Author:** Marco Graetsch

## License

GPL v2 or later - https://www.gnu.org/licenses/gpl-2.0.html

---

**Production Ready:** This package includes optimized autoloader and no development dependencies.

**Critical Update:** Version 1.1.3 is a critical bug fix for users experiencing cart quantity visibility issues with restricted products. Update recommended for all users using package quantity restrictions.
