You've already forked wc-tier-and-package-prices
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 88e30d028c | |||
| d55ada7924 | |||
| 4ece4dd69e |
@@ -13,7 +13,13 @@
|
||||
"Bash(git tag:*)",
|
||||
"Bash(rsync:*)",
|
||||
"Bash(zip -r:*)",
|
||||
"Bash(cat:*)"
|
||||
"Bash(cat:*)",
|
||||
"Bash(git commit -m \"$\\(cat <<''EOF''\nRelease version 1.1.2 - Catalog button modification\n\nEnhanced package quantity restriction enforcement by replacing \"Add to Cart\"\nbuttons with \"View Options\" links on catalog pages for products with\nquantity restrictions. This prevents customers from attempting to add\nrestricted products directly from shop/category pages.\n\nChanges:\n- Added catalog button modification for restricted products\n- Implemented \"View Options\" button with eye icon styling\n- Created has_quantity_restriction\\(\\) helper method\n- Extended CSS loading to all WooCommerce pages\n- Added modify_catalog_add_to_cart_button\\(\\) filter method\n- Updated translations with 2 new strings \\(en_US, de_DE, de_CH_informal\\)\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(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:*)"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
66
CHANGELOG.md
66
CHANGELOG.md
@@ -5,6 +5,72 @@ 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.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
|
||||
- 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
|
||||
|
||||
## [1.1.2] - 2025-12-21
|
||||
|
||||
### Added
|
||||
- Catalog "View Options" button for products with quantity restrictions
|
||||
- Automatic button replacement in shop/category/archive pages
|
||||
- Eye icon (Dashicons) for "View Options" button styling
|
||||
|
||||
### Changed
|
||||
- "Add to Cart" button replaced with "View Options" link on catalog pages for restricted products
|
||||
- CSS now loads on all WooCommerce pages (shop, cart, checkout, product)
|
||||
- Catalog buttons now direct to product page instead of adding to cart
|
||||
|
||||
### Technical
|
||||
- Added `has_quantity_restriction()` static method in WC_TPP_Frontend class
|
||||
- Added `modify_catalog_add_to_cart_button()` method in WC_TPP_Frontend class
|
||||
- Extended `woocommerce_loop_add_to_cart_link` filter hook
|
||||
- CSS classes: `wc-tpp-view-options`, `wc-tpp-cart-quantity`, `wc-tpp-restriction-notice`
|
||||
- Updated `enqueue_scripts()` to load CSS on all WooCommerce pages
|
||||
|
||||
### Translations
|
||||
- Added 2 new translatable strings
|
||||
- Updated all translations (en_US, de_DE, de_CH_informal)
|
||||
- Compiled all .mo files with new strings
|
||||
|
||||
## [1.1.1] - 2025-12-21
|
||||
|
||||
### Added
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -156,6 +156,59 @@
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Catalog "View Options" button */
|
||||
a.wc-tpp-view-options {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
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 {
|
||||
content: "\f06e";
|
||||
font-family: "dashicons";
|
||||
margin-right: 5px;
|
||||
display: inline-block;
|
||||
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 */
|
||||
.wc-tpp-cart-quantity {
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
background: #f5f5f5;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 3px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Restriction notice */
|
||||
.wc-tpp-restriction-notice {
|
||||
padding: 10px 15px;
|
||||
background: #fff3cd;
|
||||
border: 1px solid #ffc107;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 15px;
|
||||
color: #856404;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
/* Responsive design */
|
||||
@media (max-width: 768px) {
|
||||
.wc-tpp-packages {
|
||||
|
||||
@@ -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.1",
|
||||
"version": "1.1.4",
|
||||
"type": "wordpress-plugin",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"authors": [
|
||||
|
||||
@@ -14,7 +14,12 @@ 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'));
|
||||
|
||||
// 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) {
|
||||
@@ -151,11 +156,96 @@ 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 (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>';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
||||
new WC_TPP_Cart();
|
||||
|
||||
@@ -15,11 +15,19 @@ class WC_TPP_Frontend {
|
||||
add_action('woocommerce_after_add_to_cart_button', array($this, 'display_pricing_table_after'), 10);
|
||||
add_action('woocommerce_single_product_summary', array($this, 'display_pricing_table_after_price'), 15);
|
||||
add_action('woocommerce_before_add_to_cart_quantity', array($this, 'maybe_hide_quantity_input'));
|
||||
|
||||
// Modify catalog add to cart button for restricted products
|
||||
add_filter('woocommerce_loop_add_to_cart_link', array($this, 'modify_catalog_add_to_cart_button'), 10, 2);
|
||||
}
|
||||
|
||||
public function enqueue_scripts() {
|
||||
if (is_product()) {
|
||||
// Enqueue CSS on all WooCommerce pages (for catalog buttons and cart)
|
||||
if (is_woocommerce() || is_cart() || is_checkout() || is_product()) {
|
||||
wp_enqueue_style('wc-tpp-frontend', WC_TPP_PLUGIN_URL . 'assets/css/frontend.css', array(), WC_TPP_VERSION);
|
||||
}
|
||||
|
||||
// Enqueue JS only on product pages
|
||||
if (is_product()) {
|
||||
wp_enqueue_script('wc-tpp-frontend', WC_TPP_PLUGIN_URL . 'assets/js/frontend.js', array('jquery'), WC_TPP_VERSION, true);
|
||||
|
||||
// Localize script with currency settings
|
||||
@@ -126,6 +134,53 @@ class WC_TPP_Frontend {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a product has quantity restrictions enabled
|
||||
*
|
||||
* @param int $product_id Product ID
|
||||
* @return bool
|
||||
*/
|
||||
public static function has_quantity_restriction($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);
|
||||
|
||||
return ($global_restrict || $product_restrict) && !empty($packages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify catalog add to cart button for products with quantity restrictions
|
||||
*
|
||||
* @param string $html Add to cart button HTML
|
||||
* @param WC_Product $product Product object
|
||||
* @return string Modified HTML
|
||||
*/
|
||||
public function modify_catalog_add_to_cart_button($html, $product) {
|
||||
if (!$product || !is_a($product, 'WC_Product')) {
|
||||
return $html;
|
||||
}
|
||||
|
||||
$product_id = $product->get_id();
|
||||
|
||||
// Check if product has quantity restrictions
|
||||
if (!self::has_quantity_restriction($product_id)) {
|
||||
return $html;
|
||||
}
|
||||
|
||||
// Replace add to cart button with "View Options" link
|
||||
$product_url = esc_url($product->get_permalink());
|
||||
$button_text = esc_html__('View Options', 'wc-tier-package-prices');
|
||||
|
||||
$new_html = sprintf(
|
||||
'<a href="%s" class="button wc-tpp-view-options product_type_simple" aria-label="%s">%s</a>',
|
||||
$product_url,
|
||||
esc_attr(sprintf(__('View options for %s', 'wc-tier-package-prices'), $product->get_name())),
|
||||
$button_text
|
||||
);
|
||||
|
||||
return $new_html;
|
||||
}
|
||||
}
|
||||
|
||||
new WC_TPP_Frontend();
|
||||
|
||||
Binary file not shown.
@@ -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.1\n"
|
||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.4\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"
|
||||
@@ -235,3 +235,11 @@ msgstr "dieses Produkt"
|
||||
#: includes/class-wc-tpp-cart.php:128
|
||||
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||
msgstr "Die Menge %1$d ist für %2$s nicht verfügbar. Bitte wähle aus den verfügbaren Paketgrössen: %3$s"
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:173
|
||||
msgid "View Options"
|
||||
msgstr "Optionen ansehen"
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:178
|
||||
msgid "View options for %s"
|
||||
msgstr "Optionen für %s ansehen"
|
||||
|
||||
Binary file not shown.
@@ -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.1\n"
|
||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.4\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"
|
||||
@@ -235,3 +235,11 @@ msgstr "dieses Produkt"
|
||||
#: includes/class-wc-tpp-cart.php:128
|
||||
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||
msgstr "Die Menge %1$d ist für %2$s nicht verfügbar. Bitte wählen Sie aus den verfügbaren Paketgrößen: %3$s"
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:173
|
||||
msgid "View Options"
|
||||
msgstr "Optionen ansehen"
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:178
|
||||
msgid "View options for %s"
|
||||
msgstr "Optionen für %s ansehen"
|
||||
|
||||
Binary file not shown.
@@ -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.1\n"
|
||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.4\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"
|
||||
@@ -235,3 +235,11 @@ msgstr "this product"
|
||||
#: includes/class-wc-tpp-cart.php:128
|
||||
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||
msgstr "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:173
|
||||
msgid "View Options"
|
||||
msgstr "View Options"
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:178
|
||||
msgid "View options for %s"
|
||||
msgstr "View options for %s"
|
||||
|
||||
@@ -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.1\n"
|
||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.4\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"
|
||||
@@ -222,3 +222,11 @@ msgstr ""
|
||||
#: includes/class-wc-tpp-cart.php:128
|
||||
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:173
|
||||
msgid "View Options"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-wc-tpp-frontend.php:178
|
||||
msgid "View options for %s"
|
||||
msgstr ""
|
||||
|
||||
272
releases/RELEASE-INFO-1.1.1.md
Normal file
272
releases/RELEASE-INFO-1.1.1.md
Normal file
@@ -0,0 +1,272 @@
|
||||
# WooCommerce Tier and Package Prices - Release 1.1.1
|
||||
|
||||
**Release Date:** December 21, 2025
|
||||
**Version:** 1.1.1
|
||||
**Package Size:** 403 KB
|
||||
**Git Tag:** v1.1.1
|
||||
|
||||
## Download
|
||||
|
||||
**File:** `wc-tier-and-package-prices-1.1.1.zip`
|
||||
|
||||
### Checksums
|
||||
|
||||
**SHA256:**
|
||||
```
|
||||
b951f8b7ddd2bad6b3415d4583709fdf88f66aea4eae70110c903757ff53e045
|
||||
```
|
||||
|
||||
**MD5:**
|
||||
```
|
||||
51c4f8a7c3ccede2d2005f2fe3ebe44e
|
||||
```
|
||||
|
||||
## What's New in 1.1.1
|
||||
|
||||
This is a **patch release** that enhances the package quantity restriction feature introduced in v1.1.0 by preventing cart quantity bypass.
|
||||
|
||||
### Security Enhancement
|
||||
- **Fixed:** Cart quantity bypass vulnerability for package-restricted products
|
||||
- Customers could previously modify quantities in the cart to bypass package restrictions
|
||||
- This patch ensures restrictions are enforced throughout the entire purchase flow
|
||||
|
||||
### New Features
|
||||
- **Cart Quantity Field Hiding** - NEW
|
||||
- Automatic hiding of quantity input field in cart when restrictions are enabled
|
||||
- Cart displays quantity as read-only text for restricted products
|
||||
- Prevents manual quantity modification in shopping cart
|
||||
- Seamless integration with existing restriction settings
|
||||
|
||||
### Technical Improvements
|
||||
- Added `maybe_hide_cart_quantity_input()` method in WC_TPP_Cart class
|
||||
- Extended `woocommerce_cart_item_quantity` filter hook
|
||||
- New CSS class: `wc-tpp-cart-quantity` for styled quantity display
|
||||
- Enhanced cart validation and display consistency
|
||||
|
||||
## What's Changed
|
||||
|
||||
### Added
|
||||
- Cart quantity field hiding when package restriction is enabled
|
||||
- Automatic read-only quantity display in cart for restricted products
|
||||
|
||||
### Changed
|
||||
- Cart quantity input replaced with plain text when restrictions apply
|
||||
- Enhanced cart display to prevent quantity modification for restricted products
|
||||
|
||||
### Fixed
|
||||
- Cart quantity bypass vulnerability for package-restricted products
|
||||
|
||||
## Installation
|
||||
|
||||
### New Installation
|
||||
|
||||
1. Download the ZIP file: `wc-tier-and-package-prices-1.1.1.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.0
|
||||
|
||||
This is a **patch release** with a security fix. No configuration changes needed.
|
||||
|
||||
**Steps:**
|
||||
1. Deactivate version 1.1.0
|
||||
2. Upload and activate version 1.1.1
|
||||
3. All existing settings and data will be automatically preserved
|
||||
4. No additional configuration required
|
||||
|
||||
### Upgrade from 1.0.x
|
||||
|
||||
Safe to upgrade directly. This version includes all features from v1.1.0 plus the cart quantity hiding enhancement.
|
||||
|
||||
**Steps:**
|
||||
1. Deactivate the current version
|
||||
2. Upload and activate version 1.1.1
|
||||
3. All existing settings and data will be automatically preserved
|
||||
4. Review the new package restriction features if desired
|
||||
|
||||
### 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)
|
||||
|
||||
The package quantity restriction feature now provides complete enforcement across all touchpoints:
|
||||
|
||||
### 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 - NEW)
|
||||
- ✅ Quantity field hidden/replaced with read-only text
|
||||
- ✅ Prevents cart quantity modification
|
||||
- ✅ Consistent restriction enforcement
|
||||
- ✅ No bypass via cart updates
|
||||
|
||||
### Settings
|
||||
- ✅ Global setting to enable restrictions site-wide
|
||||
- ✅ Per-product override for individual products
|
||||
- ✅ Located in: WooCommerce > Settings > Tier & Package Prices
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Scenario 1: Bulk-Only Sales
|
||||
Enable restriction globally to sell products only in bulk quantities.
|
||||
|
||||
**Example:**
|
||||
- Package 1: 100 units at $500
|
||||
- Package 2: 250 units at $1,100
|
||||
- Package 3: 500 units at $2,000
|
||||
|
||||
Customers can only purchase these exact quantities on both product page and in cart.
|
||||
|
||||
### Scenario 2: Sample Packs
|
||||
Create fixed sample packs with no custom quantities.
|
||||
|
||||
**Example:**
|
||||
- Starter Pack: 10 items
|
||||
- Trial Pack: 25 items
|
||||
- Full Pack: 50 items
|
||||
|
||||
Quantity cannot be changed in cart - customers must return to product page to select a different package.
|
||||
|
||||
### Scenario 3: Promotional Bundles
|
||||
Offer promotional pricing only for specific bundle sizes with no modifications allowed.
|
||||
|
||||
**Example:**
|
||||
- Holiday Bundle: 12 units (seasonal pricing)
|
||||
- Party Pack: 24 units (bulk discount)
|
||||
- Wholesale Bundle: 100 units (wholesale pricing)
|
||||
|
||||
## Modified Files in 1.1.1
|
||||
|
||||
### Core Files Updated
|
||||
- `wc-tier-and-package-prices.php` - Version updated to 1.1.1
|
||||
- `composer.json` - Version updated to 1.1.1
|
||||
- `CHANGELOG.md` - Added v1.1.1 section
|
||||
|
||||
### PHP Classes Modified
|
||||
- `includes/class-wc-tpp-cart.php` - Added `maybe_hide_cart_quantity_input()` method
|
||||
|
||||
### Translation Files Updated
|
||||
- `languages/wc-tier-package-prices.pot` - Version updated to 1.1.1
|
||||
- `languages/wc-tier-package-prices-en_US.po` - Version updated to 1.1.1
|
||||
- `languages/wc-tier-package-prices-de_DE.po` - Version updated to 1.1.1
|
||||
- `languages/wc-tier-package-prices-de_CH_informal.po` - Version updated to 1.1.1
|
||||
|
||||
## 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 - 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 (NEW)
|
||||
|
||||
### Validation & Security
|
||||
- ✅ Client-side JavaScript validation
|
||||
- ✅ Server-side cart validation
|
||||
- ✅ Cart quantity bypass prevention (NEW)
|
||||
- ✅ User-friendly error messages
|
||||
- ✅ WooCommerce HPOS compatible
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
**None.** This release is fully backward compatible with v1.1.0 and v1.0.x.
|
||||
|
||||
## Migration Notes
|
||||
|
||||
### From 1.1.0
|
||||
- No migration needed
|
||||
- Cart quantity hiding is automatic when restrictions are enabled
|
||||
- No new settings or configuration required
|
||||
|
||||
### From 1.0.x
|
||||
- All v1.1.0 features included plus cart enhancement
|
||||
- New restriction features are 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)
|
||||
|
||||
### Future Enhancements
|
||||
These features may be added in future versions:
|
||||
- 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.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
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation:** See README.md and CHANGELOG.md
|
||||
- **Previous Release:** See RELEASE-INFO-1.1.0.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.1 is recommended for all users of v1.1.0 to ensure complete package restriction enforcement. Users on v1.0.x can safely upgrade to gain both the restriction feature and this security enhancement.
|
||||
304
releases/RELEASE-INFO-1.1.2.md
Normal file
304
releases/RELEASE-INFO-1.1.2.md
Normal file
@@ -0,0 +1,304 @@
|
||||
# WooCommerce Tier and Package Prices - Release 1.1.2
|
||||
|
||||
**Release Date:** December 21, 2025
|
||||
**Version:** 1.1.2
|
||||
**Package Size:** 405 KB
|
||||
**Git Tag:** v1.1.2
|
||||
|
||||
## Download
|
||||
|
||||
**File:** `wc-tier-and-package-prices-1.1.2.zip`
|
||||
|
||||
### Checksums
|
||||
|
||||
**SHA256:**
|
||||
```
|
||||
40ffd29ebc6af635f689472040acd220ae1c8df2f0d852fab4b43ce0fb5fe739
|
||||
```
|
||||
|
||||
**MD5:**
|
||||
```
|
||||
eee69fcf391b3f3df9380306ffb31b1b
|
||||
```
|
||||
|
||||
## What's New in 1.1.2
|
||||
|
||||
This is a **patch release** that completes the package quantity restriction feature by preventing catalog page add-to-cart attempts for restricted products.
|
||||
|
||||
### New Features
|
||||
- **Catalog "View Options" Button** - NEW
|
||||
- "Add to Cart" buttons replaced with "View Options" links on shop/category/archive pages
|
||||
- Eye icon (Dashicons) styling for visual distinction
|
||||
- Direct link to product page for package selection
|
||||
- Prevents customer confusion from attempting invalid cart additions
|
||||
|
||||
### Enhanced User Experience
|
||||
- Products with quantity restrictions now clearly indicate "View Options" instead of "Add to Cart"
|
||||
- Customers are guided to product page where they must select a valid package
|
||||
- No more failed add-to-cart attempts from catalog pages
|
||||
- Consistent restriction enforcement across all touchpoints
|
||||
|
||||
### Technical Improvements
|
||||
- Added `has_quantity_restriction()` static helper method in WC_TPP_Frontend class
|
||||
- Added `modify_catalog_add_to_cart_button()` method in WC_TPP_Frontend class
|
||||
- Extended `woocommerce_loop_add_to_cart_link` filter hook
|
||||
- Updated CSS loading to all WooCommerce pages (shop, cart, checkout, product)
|
||||
- New CSS classes: `wc-tpp-view-options`, `wc-tpp-cart-quantity`, `wc-tpp-restriction-notice`
|
||||
|
||||
## What's Changed
|
||||
|
||||
### Added
|
||||
- Catalog "View Options" button for products with quantity restrictions
|
||||
- Automatic button replacement in shop/category/archive pages
|
||||
- Eye icon (Dashicons) for "View Options" button styling
|
||||
|
||||
### Changed
|
||||
- "Add to Cart" button replaced with "View Options" link on catalog pages for restricted products
|
||||
- CSS now loads on all WooCommerce pages (shop, cart, checkout, product)
|
||||
- Catalog buttons now direct to product page instead of adding to cart
|
||||
|
||||
### Translations
|
||||
- Added 2 new translatable strings:
|
||||
- "View Options" → "Optionen ansehen" (German)
|
||||
- "View options for %s" → "Optionen für %s ansehen" (German)
|
||||
- Updated all translations (en_US, de_DE, de_CH_informal)
|
||||
- Compiled all .mo files with new strings
|
||||
|
||||
## Installation
|
||||
|
||||
### New Installation
|
||||
|
||||
1. Download the ZIP file: `wc-tier-and-package-prices-1.1.2.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.1
|
||||
|
||||
This is a **patch release** with improved user experience. No configuration changes needed.
|
||||
|
||||
**Steps:**
|
||||
1. Deactivate version 1.1.1
|
||||
2. Upload and activate version 1.1.2
|
||||
3. All existing settings and data will be automatically preserved
|
||||
4. No additional configuration required
|
||||
|
||||
### Upgrade from 1.1.0 or Earlier
|
||||
|
||||
Safe to upgrade directly. This version includes all features from v1.1.0 and v1.1.1 plus catalog button enhancements.
|
||||
|
||||
**Steps:**
|
||||
1. Deactivate the current version
|
||||
2. Upload and activate version 1.1.2
|
||||
3. All existing settings and data will be automatically preserved
|
||||
4. Review the package restriction features if desired
|
||||
|
||||
### 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)
|
||||
|
||||
The package quantity restriction feature now provides complete enforcement across all customer touchpoints:
|
||||
|
||||
### Catalog Pages (v1.1.2 - NEW)
|
||||
- ✅ "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)
|
||||
- ✅ Quantity field hidden/replaced with read-only text
|
||||
- ✅ Prevents cart quantity modification
|
||||
- ✅ Consistent restriction enforcement
|
||||
- ✅ No bypass via cart updates
|
||||
|
||||
### Settings
|
||||
- ✅ Global setting to enable restrictions site-wide
|
||||
- ✅ Per-product override for individual products
|
||||
- ✅ Located in: WooCommerce > Settings > Tier & Package Prices
|
||||
|
||||
## User Flow Comparison
|
||||
|
||||
### Before v1.1.2
|
||||
**Shop Page:** "Add to Cart" button → **Result:** Ajax add fails with error OR quantity validation error
|
||||
|
||||
### After v1.1.2
|
||||
**Shop Page:** "View Options" button → **Product Page:** Select package → **Add to Cart:** Success
|
||||
|
||||
The improved flow eliminates customer confusion and failed add-to-cart attempts.
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Scenario 1: Bulk-Only Product Catalog
|
||||
Enable restriction globally. Shop pages show "View Options" for all products.
|
||||
|
||||
**Customer Experience:**
|
||||
- Browse shop → See "View Options" on bulk products
|
||||
- Click "View Options" → Product page opens
|
||||
- Select from available packages (e.g., 100, 250, 500 units)
|
||||
- Add to cart → Success with no errors
|
||||
|
||||
### Scenario 2: Mixed Catalog
|
||||
Some products restricted, others not. Shop page shows appropriate buttons.
|
||||
|
||||
**Customer Experience:**
|
||||
- Browse shop → See mix of "Add to Cart" and "View Options"
|
||||
- Regular products: "Add to Cart" works normally
|
||||
- Restricted products: "View Options" → Product page → Package selection
|
||||
|
||||
### Scenario 3: Sample Pack Products
|
||||
Products sold only in fixed sample packs.
|
||||
|
||||
**Customer Experience:**
|
||||
- Browse samples → All show "View Options"
|
||||
- Click button → Product page shows package choices
|
||||
- Select "Starter Pack (10)", "Trial Pack (25)", or "Full Pack (50)"
|
||||
- Quantity cannot be modified in cart
|
||||
|
||||
## Modified Files in 1.1.2
|
||||
|
||||
### Core Files Updated
|
||||
- `wc-tier-and-package-prices.php` - Version updated to 1.1.2
|
||||
- `composer.json` - Version updated to 1.1.2
|
||||
- `CHANGELOG.md` - Added v1.1.2 section
|
||||
|
||||
### PHP Classes Modified
|
||||
- `includes/class-wc-tpp-frontend.php` - Added catalog button modification methods
|
||||
|
||||
### CSS Files Modified
|
||||
- `assets/css/frontend.css` - Added `.wc-tpp-view-options` button styling, eye icon
|
||||
|
||||
### Translation Files Updated
|
||||
- `languages/wc-tier-package-prices.pot` - Version updated to 1.1.2, 2 new strings
|
||||
- `languages/wc-tier-package-prices-en_US.po` - Version updated, 2 new strings
|
||||
- `languages/wc-tier-package-prices-de_DE.po` - Version updated, 2 new strings
|
||||
- `languages/wc-tier-package-prices-de_CH_informal.po` - Version updated, 2 new strings
|
||||
- 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)
|
||||
- ✅ Catalog button modification (v1.1.2 - 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
|
||||
- ✅ Catalog "View Options" button (NEW)
|
||||
|
||||
### Validation & Security
|
||||
- ✅ Client-side JavaScript validation
|
||||
- ✅ Server-side cart validation
|
||||
- ✅ Cart quantity bypass prevention
|
||||
- ✅ Catalog add-to-cart prevention (NEW)
|
||||
- ✅ User-friendly error messages
|
||||
- ✅ WooCommerce HPOS compatible
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
**None.** This release is fully backward compatible with v1.1.1, v1.1.0 and v1.0.x.
|
||||
|
||||
## Migration Notes
|
||||
|
||||
### From 1.1.1
|
||||
- No migration needed
|
||||
- Catalog button changes are automatic when restrictions are enabled
|
||||
- No new settings or configuration required
|
||||
|
||||
### From 1.1.0 or Earlier
|
||||
- All v1.1.1 and v1.1.2 features included automatically
|
||||
- New restriction features are 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.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
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation:** See README.md and CHANGELOG.md
|
||||
- **Previous Release:** See RELEASE-INFO-1.1.1.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.2 is recommended for all users to provide the best customer experience when using package quantity restrictions. The catalog button modification eliminates customer confusion and failed add-to-cart attempts.
|
||||
339
releases/RELEASE-INFO-1.1.3.md
Normal file
339
releases/RELEASE-INFO-1.1.3.md
Normal 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.
|
||||
BIN
releases/wc-tier-and-package-prices-1.1.1.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.1.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.1.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.1.zip.md5
Normal file
@@ -0,0 +1 @@
|
||||
51c4f8a7c3ccede2d2005f2fe3ebe44e wc-tier-and-package-prices-1.1.1.zip
|
||||
1
releases/wc-tier-and-package-prices-1.1.1.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.1.zip.sha256
Normal file
@@ -0,0 +1 @@
|
||||
b951f8b7ddd2bad6b3415d4583709fdf88f66aea4eae70110c903757ff53e045 wc-tier-and-package-prices-1.1.1.zip
|
||||
BIN
releases/wc-tier-and-package-prices-1.1.2.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.2.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.2.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.2.zip.md5
Normal file
@@ -0,0 +1 @@
|
||||
eee69fcf391b3f3df9380306ffb31b1b wc-tier-and-package-prices-1.1.2.zip
|
||||
1
releases/wc-tier-and-package-prices-1.1.2.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.2.zip.sha256
Normal file
@@ -0,0 +1 @@
|
||||
40ffd29ebc6af635f689472040acd220ae1c8df2f0d852fab4b43ce0fb5fe739 wc-tier-and-package-prices-1.1.2.zip
|
||||
BIN
releases/wc-tier-and-package-prices-1.1.3.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.3.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.3.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.3.zip.md5
Normal file
@@ -0,0 +1 @@
|
||||
dfec91be7e375b09613ba81cfebbe013 wc-tier-and-package-prices-1.1.3.zip
|
||||
1
releases/wc-tier-and-package-prices-1.1.3.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.3.zip.sha256
Normal file
@@ -0,0 +1 @@
|
||||
7938542680b71a7b73269c96a4dff78f2222ac8409092011c5e40e97a5e465aa wc-tier-and-package-prices-1.1.3.zip
|
||||
@@ -4,7 +4,7 @@
|
||||
* Plugin Name: WooCommerce Tier and Package Prices
|
||||
* Plugin URI: https://src.bundespruefstelle.ch/wc-tier-package-prices
|
||||
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
|
||||
* Version: 1.1.1
|
||||
* Version: 1.1.4
|
||||
* 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.1');
|
||||
define('WC_TPP_VERSION', '1.1.4');
|
||||
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__));
|
||||
|
||||
Reference in New Issue
Block a user