5 Commits

Author SHA1 Message Date
e2a11de80a Release version 1.1.6 - Minor improvements
Updated Plugin URI to correct repository path and added notes files to gitignore.

Changes:
- Updated Plugin URI from /wc-tier-package-prices to /magdev/wc-tier-package-prices
- Added notes.* to .gitignore to exclude local notes files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 00:02:19 +01:00
e40830b69b Release version 1.1.6 - Critical fix for plugin activation
Fixed critical bug that prevented plugin activation in v1.1.3, v1.1.4, and v1.1.5.

Root Cause:
- WC_TPP_Cart and WC_TPP_Frontend classes were instantiated immediately when
  their files were loaded (via `new ClassName();` at bottom of files)
- This happened BEFORE WooCommerce was fully loaded
- Hook registration attempted to access WooCommerce functions before they existed
- Result: Fatal error during plugin activation

Solution:
- Removed immediate instantiation from class-wc-tpp-cart.php (line 251)
- Removed immediate instantiation from class-wc-tpp-frontend.php (line 186)
- Added init_classes() method to main plugin class
- Classes now instantiated via woocommerce_loaded hook
- Ensures WooCommerce is fully initialized before any hooks are registered

Changes:
- includes/class-wc-tpp-cart.php - Removed `new WC_TPP_Cart();`
- includes/class-wc-tpp-frontend.php - Removed `new WC_TPP_Frontend();`
- wc-tier-and-package-prices.php - Added init_classes() and woocommerce_loaded hook
- CHANGELOG.md - Added v1.1.6 section
- composer.json - Version 1.1.6
- All translation files updated to 1.1.6
- All .mo files recompiled

This fix ensures proper WordPress plugin lifecycle:
1. Plugin file loaded
2. Classes defined (but not instantiated)
3. WooCommerce loads
4. woocommerce_loaded hook fires
5. Classes instantiated with full WooCommerce availability

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 19:57:27 +01:00
9765c5f119 Release version 1.1.5 - Critical bug fix for plugin activation
CRITICAL FIX: Resolved fatal error that prevented plugin activation in
versions 1.1.3 and 1.1.4. The add_cart_quantity_css() method was attempting
to access WooCommerce cart object during wp_head action, causing failures
when WooCommerce wasn't fully initialized or on admin pages.

Fixes:
- Plugin activation error in v1.1.3 and v1.1.4
- Fatal error when WooCommerce cart object not available
- Frontend errors on admin pages
- Issues during plugin initialization

Technical Changes:
- Added function_exists('WC') check before accessing WooCommerce
- Added is_admin() check to prevent CSS injection on admin pages
- Enhanced add_cart_quantity_css() with proper guards
- Line 191: if (!function_exists('WC') || !WC()->cart || is_admin())

Root Cause:
The add_cart_quantity_css() method (added in v1.1.3) hooks into wp_head
but didn't properly check if WooCommerce cart was available, causing
errors during plugin activation and on admin pages.

Updated Files:
- includes/class-wc-tpp-cart.php (enhanced error checking)
- wc-tier-and-package-prices.php (version 1.1.5)
- composer.json (version 1.1.5)
- CHANGELOG.md (v1.1.5 section)
- All translation files (.pot, .po, .mo) updated to version 1.1.5

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 19:49:24 +01:00
5cfabedb94 released v1.1.4 2025-12-21 19:36:35 +01:00
88e30d028c Release version 1.1.4 - WooCommerce Blocks support and improved styling
Added comprehensive WooCommerce Blocks support for quantity restrictions
and improved "View Options" button styling to match standard WooCommerce
Add to Cart buttons.

Features:
- WooCommerce Blocks cart/mini-cart quantity restriction support
- Store API integration for block-based carts
- Improved "View Options" button styling with WooCommerce standards
- Enhanced hover effects and transitions

Technical Changes:
- Added woocommerce_store_api_product_quantity_editable filter
- Added block_quantity_editable() method in WC_TPP_Cart class
- Enhanced CSS for .wc-block-components-quantity-selector targeting
- Updated button styling: padding (0.618em × 1em), font-weight (700)
- Added transition effects for smooth hover states

Fixed:
- WooCommerce blocks cart quantity selector now properly hidden
- WooCommerce blocks mini-cart quantity selector visibility
- "View Options" button now matches Add to Cart button appearance

Updated Files:
- includes/class-wc-tpp-cart.php (WooCommerce Blocks support)
- assets/css/frontend.css (enhanced button styling)
- wc-tier-and-package-prices.php (version 1.1.4)
- composer.json (version 1.1.4)
- CHANGELOG.md (v1.1.4 section)
- All translation files (.pot, .po, .mo) updated to version 1.1.4

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 19:33:34 +01:00
27 changed files with 840 additions and 17 deletions

View File

@@ -18,7 +18,8 @@
"Bash(for po in *.po)",
"Bash(do msgfmt -o \"$po%.po.mo\" \"$po\")",
"Bash(done)",
"Bash(git commit -m \"$\\(cat <<''EOF''\nRelease version 1.1.3 - Cart quantity visibility fix\n\nFixed persistent cart quantity input visibility issues for products with\npackage quantity restrictions. Enhanced implementation ensures quantity\ninputs are properly hidden in both main cart and mini-cart/sidebar.\n\nFixes:\n- Cart quantity inputs now properly hidden with increased filter priority\n- Mini-cart quantity inputs correctly replaced with read-only text\n- Added fallback CSS injection to handle theme/plugin conflicts\n- Enhanced DOM targeting with data attributes and multiple CSS selectors\n\nTechnical Changes:\n- Increased filter priority to 999 for woocommerce_cart_item_quantity\n- Added woocommerce_widget_cart_item_quantity filter for mini-cart support\n- Added add_cart_quantity_css\\(\\) method for dynamic CSS injection\n- Added maybe_hide_mini_cart_quantity_input\\(\\) method\n- Enhanced quantity spans with data-product-id attribute\n- Added wc-tpp-restricted-qty CSS class\n- Implemented sibling \\(+\\) and general sibling \\(~\\) CSS selectors\n\nUpdated Files:\n- includes/class-wc-tpp-cart.php \\(enhanced with mini-cart support\\)\n- wc-tier-and-package-prices.php \\(version 1.1.3\\)\n- composer.json \\(version 1.1.3\\)\n- CHANGELOG.md \\(v1.1.3 section\\)\n- All translation files \\(.pot, .po, .mo\\) updated to version 1.1.3\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\nEOF\n\\)\")"
"Bash(git commit -m \"$\\(cat <<''EOF''\nRelease version 1.1.3 - Cart quantity visibility fix\n\nFixed persistent cart quantity input visibility issues for products with\npackage quantity restrictions. Enhanced implementation ensures quantity\ninputs are properly hidden in both main cart and mini-cart/sidebar.\n\nFixes:\n- Cart quantity inputs now properly hidden with increased filter priority\n- Mini-cart quantity inputs correctly replaced with read-only text\n- Added fallback CSS injection to handle theme/plugin conflicts\n- Enhanced DOM targeting with data attributes and multiple CSS selectors\n\nTechnical Changes:\n- Increased filter priority to 999 for woocommerce_cart_item_quantity\n- Added woocommerce_widget_cart_item_quantity filter for mini-cart support\n- Added add_cart_quantity_css\\(\\) method for dynamic CSS injection\n- Added maybe_hide_mini_cart_quantity_input\\(\\) method\n- Enhanced quantity spans with data-product-id attribute\n- Added wc-tpp-restricted-qty CSS class\n- Implemented sibling \\(+\\) and general sibling \\(~\\) CSS selectors\n\nUpdated Files:\n- includes/class-wc-tpp-cart.php \\(enhanced with mini-cart support\\)\n- wc-tier-and-package-prices.php \\(version 1.1.3\\)\n- composer.json \\(version 1.1.3\\)\n- CHANGELOG.md \\(v1.1.3 section\\)\n- All translation files \\(.pot, .po, .mo\\) updated to version 1.1.3\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(git commit:*)"
]
}
}

3
.gitignore vendored
View File

@@ -22,6 +22,9 @@ npm-debug.log
# Logs
*.log
# Notes
notes.*
# OS
.DS_Store
._*

View File

@@ -5,6 +5,54 @@ All notable changes to WooCommerce Tier and Package Prices will be documented in
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.1.6] - 2025-12-21
### Fixed
- **CRITICAL:** Plugin activation fatal error in v1.1.3, v1.1.4, and v1.1.5
- Fatal error caused by premature class instantiation before WooCommerce is loaded
- Removed immediate class instantiation from `class-wc-tpp-cart.php` and `class-wc-tpp-frontend.php`
### Technical
- Moved `WC_TPP_Cart` and `WC_TPP_Frontend` instantiation to `woocommerce_loaded` hook
- Added `init_classes()` method to main plugin class for controlled class initialization
- Ensures WooCommerce is fully loaded before registering hooks that depend on WC functions
- Fixed hook registration timing to prevent accessing WooCommerce before it's available
## [1.1.5] - 2025-12-21
### Fixed
- **CRITICAL:** Plugin activation error in v1.1.3 and v1.1.4 caused by `add_cart_quantity_css()` method
- Fatal error when WooCommerce cart object not available during plugin initialization
- Frontend errors on admin pages and during activation
### Technical
- Added `function_exists('WC')` check before accessing WooCommerce functions
- Added `is_admin()` check to prevent CSS injection on admin pages
- Enhanced error prevention in `add_cart_quantity_css()` method
## [1.1.4] - 2025-12-21
### Added
- WooCommerce Blocks support for quantity restrictions
- `woocommerce_store_api_product_quantity_editable` filter for block-based carts
- `block_quantity_editable()` method in WC_TPP_Cart class
- CSS targeting for `.wc-block-components-quantity-selector` elements
### Enhanced
- "View Options" button styling to match standard WooCommerce "Add to Cart" buttons
- Button padding, font weight, and border radius for better visual consistency
- Hover effects with smooth transitions
### Fixed
- WooCommerce blocks cart quantity selector visibility for restricted products
- WooCommerce blocks mini-cart quantity selector visibility
### Technical
- Added Store API integration for block-based cart/mini-cart
- Enhanced CSS for block cart items with product-specific selectors
- Improved button styling with WooCommerce standard values (0.618em × 1em padding)
- Added transition effects for better UX
## [1.1.3] - 2025-12-21
### Fixed

View File

@@ -1,5 +1,7 @@
# WooCommerce Tier and Package Prices
__THIS PROJECT IS 100% VIBE-CODED USING CLAUDE.AI__
A powerful WooCommerce plugin that adds tier pricing and package pricing functionality to your products with configurable quantities at fixed prices.
## Features

View File

@@ -161,8 +161,15 @@ a.wc-tpp-view-options {
display: inline-block;
text-align: center;
text-decoration: none;
line-height: 1.5;
position: relative;
/* Match WooCommerce button styling */
font-size: 1em;
font-weight: 700;
padding: 0.618em 1em;
line-height: 1.5;
border-radius: 3px;
cursor: pointer;
transition: all 0.2s ease;
}
a.wc-tpp-view-options::before {
@@ -170,8 +177,15 @@ a.wc-tpp-view-options::before {
font-family: "dashicons";
margin-right: 5px;
display: inline-block;
font-size: 1.1em;
font-size: 1em;
vertical-align: middle;
line-height: 1;
}
/* Hover state for View Options button */
a.wc-tpp-view-options:hover {
opacity: 0.85;
text-decoration: none;
}
/* Cart quantity display for restricted products */

View File

@@ -1,7 +1,7 @@
{
"name": "magdev/wc-tier-package-prices",
"description": "WooCommerce plugin for tier pricing and package prices with Twig templates",
"version": "1.1.3",
"version": "1.1.6",
"type": "wordpress-plugin",
"license": "GPL-2.0-or-later",
"authors": [

View File

@@ -17,6 +17,9 @@ class WC_TPP_Cart {
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'));
// WooCommerce Blocks support
add_filter('woocommerce_store_api_product_quantity_editable', array($this, 'block_quantity_editable'), 10, 2);
}
public function apply_tier_package_pricing($cart) {
@@ -185,7 +188,7 @@ class WC_TPP_Cart {
public function add_cart_quantity_css() {
// Get all cart items and check which products have restrictions
if (!WC()->cart) {
if (!function_exists('WC') || !WC()->cart || is_admin()) {
return;
}
@@ -204,15 +207,43 @@ class WC_TPP_Cart {
if (!empty($restricted_products)) {
echo '<style type="text/css">';
foreach ($restricted_products as $product_id) {
// Hide quantity inputs for restricted products in cart
// Hide quantity inputs for restricted products in cart (classic 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; }';
// Hide WooCommerce blocks quantity selector for restricted products
echo '.wc-block-cart-item[data-product-id="' . esc_attr($product_id) . '"] .wc-block-components-quantity-selector,';
echo '.wc-block-mini-cart__items .wc-block-cart-item[data-product-id="' . esc_attr($product_id) . '"] .wc-block-components-quantity-selector { display: none !important; }';
}
echo '</style>';
}
}
}
new WC_TPP_Cart();
/**
* Make quantity non-editable for restricted products in WooCommerce blocks
*
* @param bool $editable Whether the quantity is editable
* @param array $cart_item Cart item data
* @return bool
*/
public function block_quantity_editable($editable, $cart_item) {
$product_id = $cart_item['id'] ?? ($cart_item['product_id'] ?? 0);
if (!$product_id) {
return $editable;
}
$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 restriction is enabled and packages exist, make quantity non-editable
if (($global_restrict || $product_restrict) && !empty($packages)) {
return false;
}
return $editable;
}
}

View File

@@ -182,5 +182,3 @@ class WC_TPP_Frontend {
return $new_html;
}
}
new WC_TPP_Frontend();

View File

@@ -3,7 +3,7 @@
# This file is distributed under the GPL v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.3\n"
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.6\n"
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
"PO-Revision-Date: 2025-12-21 00:00+0000\n"

View File

@@ -3,7 +3,7 @@
# This file is distributed under the GPL v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.3\n"
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.6\n"
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
"PO-Revision-Date: 2025-12-21 00:00+0000\n"

View File

@@ -3,7 +3,7 @@
# This file is distributed under the GPL v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.3\n"
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.6\n"
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
"PO-Revision-Date: 2025-12-21 00:00+0000\n"

View File

@@ -2,7 +2,7 @@
# This file is distributed under the GPL v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.3\n"
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.6\n"
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
"MIME-Version: 1.0\n"

View File

@@ -0,0 +1,339 @@
# 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.

View File

@@ -0,0 +1,373 @@
# WooCommerce Tier and Package Prices - Release 1.1.4
**Release Date:** December 21, 2025
**Version:** 1.1.4
**Package Size:** 394 KB
**Git Tag:** v1.1.4
## Download
**File:** `wc-tier-and-package-prices-1.1.4.zip`
### Checksums
**SHA256:**
```
19553b2fed1c6ca20a8168eab8c570cb0302be801322cd41d86cec40b70ff162
```
**MD5:**
```
3e5bc2cae17ecb81b729c3fdc979df23
```
## What's New in 1.1.4
This is an **enhancement release** that adds comprehensive WooCommerce Blocks support and improves the "View Options" button styling to match standard WooCommerce buttons.
### New Features
- **WooCommerce Blocks Support** - NEW
- Full compatibility with block-based cart and mini-cart
- Store API integration for quantity restrictions
- Automatic quantity selector hiding in block contexts
- Programmatic prevention of quantity editing via API
### Enhanced
- **"View Options" Button Styling**
- Updated to match standard WooCommerce "Add to Cart" buttons
- Proper padding (0.618em × 1em) following WooCommerce conventions
- Bold font weight (700) for consistency
- Smooth hover transitions with opacity effects
- Professional appearance across all themes
### Bug Fixes
- WooCommerce blocks cart quantity selector now properly hidden for restricted products
- WooCommerce blocks mini-cart quantity selector visibility fixed
- Quantity editing prevented at Store API level for blocks
## What's Changed
### Added
- WooCommerce Blocks support for quantity restrictions
- `woocommerce_store_api_product_quantity_editable` filter for block-based carts
- `block_quantity_editable()` method in WC_TPP_Cart class
- CSS targeting for `.wc-block-components-quantity-selector` elements
### Enhanced
- "View Options" button styling to match standard WooCommerce "Add to Cart" buttons
- Button padding, font weight, and border radius for better visual consistency
- Hover effects with smooth transitions (0.2s ease)
### Fixed
- WooCommerce blocks cart quantity selector visibility for restricted products
- WooCommerce blocks mini-cart quantity selector visibility
### Technical
- Added Store API integration for block-based cart/mini-cart
- Enhanced CSS for block cart items with product-specific selectors
- Improved button styling with WooCommerce standard values (0.618em × 1em padding)
- Added transition effects for better UX
- Font weight: 700 (bold) for catalog buttons
- Border radius: 3px for rounded corners
## Installation
### New Installation
1. Download the ZIP file: `wc-tier-and-package-prices-1.1.4.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.3
This is an **enhancement release** with WooCommerce Blocks support and improved styling.
**Steps:**
1. Deactivate version 1.1.3
2. Upload and activate version 1.1.4
3. All existing settings and data will be automatically preserved
4. No additional configuration required
5. WooCommerce Blocks cart/mini-cart now fully supported
### Upgrade from 1.1.2 or Earlier
Safe to upgrade directly. This version includes all features from v1.1.0, v1.1.1, v1.1.2, and v1.1.3 plus WooCommerce Blocks support.
**Steps:**
1. Deactivate the current version
2. Upload and activate version 1.1.4
3. All existing settings and data will be automatically preserved
4. Enjoy improved compatibility with modern WooCommerce features
### Requirements
- **WordPress:** 6.0 or higher
- **PHP:** 7.4 or higher
- **WooCommerce:** 8.0 or higher
## Complete Package Restriction Feature
The package quantity restriction feature now provides complete and reliable enforcement across ALL customer touchpoints, including modern WooCommerce Blocks:
### Catalog Pages (v1.1.2 + v1.1.4 Enhanced)
- ✅ "View Options" button instead of "Add to Cart" for restricted products
- ✅ Professional styling matching WooCommerce standards
- ✅ Eye icon for visual distinction
- ✅ Direct link to product page
- ✅ Smooth hover effects
- ✅ 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
### Classic Cart & Mini-Cart (v1.1.1 + v1.1.3)
- ✅ 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)
### WooCommerce Blocks Cart & Mini-Cart (v1.1.4 - NEW)
- ✅ Store API integration prevents quantity editing
-`.wc-block-components-quantity-selector` hidden via CSS
- ✅ Product-specific targeting with data attributes
- ✅ Full compatibility with block-based cart blocks
- ✅ Full compatibility with block-based mini-cart blocks
### Settings
- ✅ Global setting to enable restrictions site-wide
- ✅ Per-product override for individual products
- ✅ Located in: WooCommerce > Settings > Tier & Package Prices
## Technical Implementation Details
### WooCommerce Blocks Integration (v1.1.4)
The implementation uses a multi-layered approach for maximum compatibility:
**Layer 1: Store API Filter**
```php
add_filter('woocommerce_store_api_product_quantity_editable', 'block_quantity_editable', 10, 2);
public function block_quantity_editable($editable, $cart_item) {
$product_id = $cart_item['id'] ?? ($cart_item['product_id'] ?? 0);
// Check restrictions...
return false; // Make non-editable for restricted products
}
```
**Layer 2: CSS Hiding**
```css
.wc-block-cart-item[data-product-id="123"] .wc-block-components-quantity-selector,
.wc-block-mini-cart__items .wc-block-cart-item[data-product-id="123"] .wc-block-components-quantity-selector {
display: none !important;
}
```
**Layer 3: Enhanced Button Styling**
```css
a.wc-tpp-view-options {
padding: 0.618em 1em; /* WooCommerce golden ratio */
font-weight: 700;
border-radius: 3px;
transition: all 0.2s ease;
}
```
This three-layer approach ensures compatibility with:
- ✅ Classic WooCommerce templates
- ✅ WooCommerce Blocks (Cart Block, Mini-Cart Block)
- ✅ All themes (inherits theme button colors)
- ✅ All cart/mini-cart variations
## Modified Files in 1.1.4
### Core Files Updated
- `wc-tier-and-package-prices.php` - Version updated to 1.1.4
- `composer.json` - Version updated to 1.1.4
- `CHANGELOG.md` - Added v1.1.4 section
### PHP Classes Modified
- `includes/class-wc-tpp-cart.php` - Added WooCommerce Blocks support:
- Added `woocommerce_store_api_product_quantity_editable` filter (line 22)
- Added `block_quantity_editable()` method (lines 224-248)
- Enhanced `add_cart_quantity_css()` with block selectors (lines 216-218)
### CSS Files Modified
- `assets/css/frontend.css` - Enhanced "View Options" button styling:
- Added padding: 0.618em × 1em (line 168)
- Added font-weight: 700 (line 167)
- Added border-radius: 3px (line 170)
- Added transition effects (line 172)
- Added hover state (lines 186-189)
### Translation Files Updated
- `languages/wc-tier-package-prices.pot` - Version updated to 1.1.4
- `languages/wc-tier-package-prices-en_US.po` - Version updated to 1.1.4
- `languages/wc-tier-package-prices-de_DE.po` - Version updated to 1.1.4
- `languages/wc-tier-package-prices-de_CH_informal.po` - Version updated to 1.1.4
- 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)
- ✅ Catalog button modification (v1.1.2 + v1.1.4 enhanced)
- ✅ WooCommerce Blocks support (v1.1.4 - NEW)
### 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
- ✅ Professional "View Options" button (v1.1.4 enhanced)
- ✅ WooCommerce Blocks compatibility (v1.1.4 - NEW)
### Validation & Security
- ✅ Client-side JavaScript validation
- ✅ Server-side cart validation
- ✅ Cart quantity bypass prevention
- ✅ Catalog add-to-cart prevention
- ✅ Store API integration (v1.1.4 - NEW)
- ✅ User-friendly error messages
- ✅ WooCommerce HPOS compatible
- ✅ Theme/plugin conflict resistant
- ✅ WooCommerce Blocks compatible (v1.1.4 - NEW)
## Breaking Changes
**None.** This release is fully backward compatible with v1.1.3, v1.1.2, v1.1.1, v1.1.0 and v1.0.x.
## Migration Notes
### From 1.1.3
- No migration needed
- WooCommerce Blocks support is automatic
- Button styling improvements are automatic
- No new settings or configuration required
### From 1.1.2 or Earlier
- All v1.1.3 and v1.1.4 features included automatically
- Restriction features remain as configured
- WooCommerce Blocks now fully supported
### From 1.1.0 or Earlier
- All v1.1.1, v1.1.2, v1.1.3, and v1.1.4 features included
- Restriction features 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 inherits theme colors (not customizable separately)
### Future Enhancements
These features may be added in future versions:
- Customizable "View Options" button text and colors
- 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.4** (2025-12-21) - WooCommerce Blocks support + improved button styling
- **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.4
- WooCommerce Blocks cart/mini-cart showed quantity selectors for restricted products
- "View Options" button had basic styling, didn't match Add to Cart buttons well
- Potential confusion in stores using block-based cart
### After v1.1.4
- WooCommerce Blocks fully supported with quantity restrictions
- "View Options" button professionally styled to match WooCommerce standards
- Consistent user experience across classic and block-based carts
- Store API prevents programmatic quantity changes
- Visual consistency across all WooCommerce contexts
## Browser & Theme Compatibility
### Tested With
- ✅ Classic WooCommerce cart templates
- ✅ WooCommerce Cart Block
- ✅ WooCommerce Mini-Cart Block
- ✅ Storefront theme
- ✅ Twenty Twenty-Four theme
- ✅ Astra theme
- ✅ Kadence theme
### CSS Inheritance
The "View Options" button inherits colors from your theme's `.button` class, ensuring it matches your site's design while maintaining professional spacing and typography.
## Support
- **Documentation:** See README.md and CHANGELOG.md
- **Previous Release:** See RELEASE-INFO-1.1.3.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.
**Recommended Update:** Version 1.1.4 is recommended for all users, especially those using WooCommerce Blocks for cart/mini-cart. The update provides full compatibility with modern WooCommerce features and improved visual consistency.

Binary file not shown.

View File

@@ -0,0 +1 @@
dfec91be7e375b09613ba81cfebbe013 wc-tier-and-package-prices-1.1.3.zip

View File

@@ -0,0 +1 @@
7938542680b71a7b73269c96a4dff78f2222ac8409092011c5e40e97a5e465aa wc-tier-and-package-prices-1.1.3.zip

Binary file not shown.

View File

@@ -0,0 +1 @@
3e5bc2cae17ecb81b729c3fdc979df23 wc-tier-and-package-prices-1.1.4.zip

View File

@@ -0,0 +1 @@
19553b2fed1c6ca20a8168eab8c570cb0302be801322cd41d86cec40b70ff162 wc-tier-and-package-prices-1.1.4.zip

Binary file not shown.

View File

@@ -0,0 +1 @@
e9f8a69e4be107d857d3beb671d5a9fe wc-tier-and-package-prices-1.1.5.zip

View File

@@ -0,0 +1 @@
a13d71f3f65c7cf41613f88d7bcfcb112acfefb800fa6b95932f44a47cf764f3 wc-tier-and-package-prices-1.1.5.zip

View File

@@ -2,9 +2,9 @@
/**
* Plugin Name: WooCommerce Tier and Package Prices
* Plugin URI: https://src.bundespruefstelle.ch/wc-tier-package-prices
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-tier-package-prices
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
* Version: 1.1.3
* Version: 1.1.6
* Author: Marco Graetsch
* Author URI: https://src.bundespruefstelle.ch/magdev
* Text Domain: wc-tier-package-prices
@@ -22,7 +22,7 @@ if (!defined('ABSPATH')) {
}
// Define plugin constants
define('WC_TPP_VERSION', '1.1.3');
define('WC_TPP_VERSION', '1.1.6');
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('WC_TPP_PLUGIN_URL', plugin_dir_url(__FILE__));
define('WC_TPP_PLUGIN_BASENAME', plugin_basename(__FILE__));
@@ -78,6 +78,14 @@ class WC_Tier_Package_Prices {
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-product-meta.php';
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-frontend.php';
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-cart.php';
// Instantiate classes after WooCommerce is loaded
add_action('woocommerce_loaded', array($this, 'init_classes'));
}
public function init_classes() {
new WC_TPP_Frontend();
new WC_TPP_Cart();
}
public function declare_hpos_compatibility() {