3 Commits

Author SHA1 Message Date
af532b56eb Release version 1.1.7 - Enhanced user experience features
Added three new customer-facing features to improve product page interaction
and tier pricing functionality.

Features:
- Optional text labels for tier pricing (similar to package labels)
- Clickable tier pricing table rows to auto-populate quantity field
- Add to Cart button auto-disables when quantity is 0 or less

Enhanced User Experience:
- Tier pricing rows now clickable with cursor pointer and hover animation
- Clicking tier row sets quantity and smoothly scrolls to quantity field
- Add to Cart button shows disabled state with reduced opacity
- Tier labels display below quantity in italic gray text

Technical Changes:
- Added optional 'label' field to tier pricing admin meta box
- Updated tier save logic to include label field (sanitized)
- Enhanced tier pricing frontend template to display labels
- Added click handler for tier pricing rows in frontend.js
- Added updateAddToCartButton() function to manage button state
- CSS: .wc-tpp-tier-label styling for tier labels
- CSS: Clickable cursor and hover transform for tier rows
- CSS: Disabled button styling (.single_add_to_cart_button:disabled)

Updated Files:
- templates/admin/tier-row.twig (added label field)
- includes/class-wc-tpp-product-meta.php (save label, template update)
- templates/frontend/tier-pricing-table.twig (display labels)
- assets/js/frontend.js (tier row clicks, button disable logic)
- assets/css/frontend.css (tier label style, clickable rows, disabled button)
- wc-tier-and-package-prices.php (version 1.1.7)
- composer.json (version 1.1.7)
- CHANGELOG.md (v1.1.7 section)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 00:15:48 +01:00
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
26 changed files with 485 additions and 17 deletions

View File

@@ -19,7 +19,8 @@
"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:*)"
"Bash(git commit:*)",
"Bash(node -c:*)"
]
}
}

3
.gitignore vendored
View File

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

View File

@@ -5,6 +5,46 @@ 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.7] - 2025-12-22
### Added
- Optional text labels for tier pricing (similar to package labels)
- Clickable tier pricing rows that auto-populate quantity field
- Add to Cart button auto-disable when quantity is 0 or less
### Enhanced
- Tier pricing table rows now clickable with visual hover feedback
- Clicking a tier row sets quantity to that tier's minimum quantity
- Smooth scroll animation to quantity field when tier is clicked
- Add to Cart button disabled state with visual feedback (opacity, cursor)
- Tier labels display below quantity in frontend table (italic, gray text)
### Technical Details
- Added optional `label` field to tier pricing meta box (admin/tier-row.twig)
- Updated tier save logic to store label field (class-wc-tpp-product-meta.php)
- Enhanced tier pricing template to display labels (frontend/tier-pricing-table.twig)
- Added click handler for tier rows (assets/js/frontend.js)
- Added `updateAddToCartButton()` function to manage button state
- CSS: `.wc-tpp-tier-label` styling for tier labels
- CSS: Clickable cursor and hover animation for tier rows
- CSS: Disabled button styling (`.single_add_to_cart_button:disabled`)
## [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

View File

@@ -50,11 +50,13 @@
.wc-tpp-table tbody tr {
border-bottom: 1px solid #e0e0e0;
transition: background-color 0.2s;
transition: all 0.2s;
cursor: pointer;
}
.wc-tpp-table tbody tr:hover {
background: #f5f5f5;
transform: translateX(2px);
}
.wc-tpp-table tbody tr.wc-tpp-active-tier {
@@ -67,6 +69,14 @@
font-size: 0.95em;
}
.wc-tpp-tier-label {
display: inline-block;
margin-top: 4px;
color: #666;
font-style: italic;
font-size: 0.9em;
}
/* Package pricing */
.wc-tpp-packages {
display: grid;
@@ -209,6 +219,14 @@ a.wc-tpp-view-options:hover {
font-size: 0.95em;
}
/* Disabled add to cart button */
.single_add_to_cart_button.disabled,
.single_add_to_cart_button:disabled {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
/* Responsive design */
@media (max-width: 768px) {
.wc-tpp-packages {

View File

@@ -8,6 +8,7 @@
$(document).ready(function() {
const $quantityInput = $('input.qty');
const $priceDisplay = $('.woocommerce-Price-amount.amount').first();
const $addToCartButton = $('.single_add_to_cart_button');
const isRestrictedMode = $('.wc-tpp-package-pricing-table').hasClass('wc-tpp-restricted-mode');
if ($quantityInput.length === 0 && !isRestrictedMode) {
@@ -154,9 +155,35 @@
$('.wc-tpp-price-message').remove();
}
// Toggle add to cart button state based on quantity
function updateAddToCartButton() {
const quantity = parseInt($quantityInput.val()) || 0;
if (quantity <= 0) {
$addToCartButton.prop('disabled', true).addClass('disabled');
} else {
$addToCartButton.prop('disabled', false).removeClass('disabled');
}
}
// Handle quantity input changes
$quantityInput.on('input change', function() {
updatePriceDisplay();
updateAddToCartButton();
});
// Handle tier pricing row clicks
$('.wc-tpp-tier-pricing-table tbody tr').on('click', function() {
const minQty = parseInt($(this).data('min-qty'));
if ($quantityInput.length > 0 && !isRestrictedMode) {
$quantityInput.val(minQty).trigger('change');
// Scroll to quantity input for better UX
$('html, body').animate({
scrollTop: $quantityInput.offset().top - 100
}, 300);
}
});
// Handle package selection
@@ -212,6 +239,11 @@
if (!isRestrictedMode) {
updatePriceDisplay();
}
// Initial button state check
if ($quantityInput.length > 0 && $addToCartButton.length > 0) {
updateAddToCartButton();
}
});
})(jQuery);

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.5",
"version": "1.1.7",
"type": "wordpress-plugin",
"license": "GPL-2.0-or-later",
"authors": [

View File

@@ -247,5 +247,3 @@ class WC_TPP_Cart {
return $editable;
}
}
new WC_TPP_Cart();

View File

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

View File

@@ -81,7 +81,7 @@ class WC_TPP_Product_Meta {
</div>
<script type="text/html" id="wc-tpp-tier-row-template">
<?php $this->render_tier_row('{{INDEX}}', array('min_qty' => '', 'price' => '')); ?>
<?php $this->render_tier_row('{{INDEX}}', array('min_qty' => '', 'price' => '', 'label' => '')); ?>
</script>
<script type="text/html" id="wc-tpp-package-row-template">
@@ -127,7 +127,8 @@ class WC_TPP_Product_Meta {
if (!empty($tier['min_qty']) && !empty($tier['price'])) {
$tiers[] = array(
'min_qty' => absint($tier['min_qty']),
'price' => wc_format_decimal($tier['price'])
'price' => wc_format_decimal($tier['price']),
'label' => sanitize_text_field($tier['label'] ?? '')
);
}
}

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.5\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.5\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.5\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.5\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,352 @@
# WooCommerce Tier and Package Prices - Release 1.1.6
**Release Date:** December 22, 2025
**Version:** 1.1.6
**Package Size:** 54 KB
**Git Tag:** v1.1.6
## Download
**File:** `wc-tier-and-package-prices-1.1.6.zip`
### Checksums
**SHA256:**
```
730e366764449ac963bc85848ac8a91f654e4b35500ed3132a280ab4f215c80c
```
**MD5:**
```
dbea10acffdc849f9aa387d128cb6d6e
```
## What's New in 1.1.6
This is a **critical bug fix release** that resolves fatal errors introduced in versions 1.1.3, 1.1.4, and 1.1.5 during plugin activation.
### Critical Fixes
- **Plugin Activation Fatal Error** - FIXED
- 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`
- Ensures WooCommerce is fully loaded before registering hooks that depend on WC functions
### Technical Changes
- 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
- Fixed hook registration timing to prevent accessing WooCommerce before it's available
## What Was Fixed
### The Problem (v1.1.3, v1.1.4, v1.1.5)
The previous three versions had a critical bug that caused fatal errors during plugin activation:
**Error Message:**
```
Fatal error: Call to undefined function WC()
Fatal error: Call to undefined function is_cart()
Fatal error: Call to undefined function is_checkout()
```
**Root Cause:**
- Classes `WC_TPP_Cart` and `WC_TPP_Frontend` were instantiated immediately in their files
- These classes register hooks that call WooCommerce functions (`WC()`, `is_cart()`, etc.)
- During plugin activation, these files are included before WooCommerce is loaded
- Hook registration attempts to call undefined WooCommerce functions
- Result: Fatal error and plugin activation failure
**Impact:**
- Plugin could not be activated on fresh installations
- Plugin could not be updated from v1.1.2 or earlier
- Affected all users attempting to install/update in v1.1.3-v1.1.5
### The Solution (v1.1.6)
**Before (v1.1.3-v1.1.5):**
```php
// At bottom of class-wc-tpp-cart.php and class-wc-tpp-frontend.php
new WC_TPP_Cart(); // Instantiated immediately!
new WC_TPP_Frontend(); // Instantiated immediately!
```
**After (v1.1.6):**
```php
// In main plugin file (wc-tier-and-package-prices.php)
private function includes() {
// ... require files ...
// 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();
}
```
**Why This Works:**
1. Class files are required but not instantiated during `includes()`
2. Main plugin hooks into `woocommerce_loaded` action
3. WooCommerce fully loads and defines all functions
4. `init_classes()` is called, safely instantiating classes
5. All WooCommerce functions are available when hooks are registered
## Affected Versions
### Broken Versions
-**v1.1.3** - Plugin activation fatal error
-**v1.1.4** - Plugin activation fatal error
-**v1.1.5** - Plugin activation fatal error (attempted fix failed)
### Fixed Versions
-**v1.1.6** - Plugin activation works correctly
-**v1.1.2** - No activation issues (last working version before bug)
## Installation
### New Installation
1. Download the ZIP file: `wc-tier-and-package-prices-1.1.6.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.5, 1.1.4, or 1.1.3
This is a **critical bug fix release**. If you have v1.1.3, v1.1.4, or v1.1.5 installed and working, upgrade to v1.1.6 immediately.
**Important Notes:**
- If your current version is **working**, you likely installed it on a site where WooCommerce was already active
- The bug only manifests during fresh activation or when upgrading with the plugin deactivated
- Upgrade is safe and preserves all settings and data
**Steps:**
1. Deactivate current version (if active)
2. Delete the plugin from WordPress admin
3. Upload and activate version 1.1.6
4. All existing settings and data will be automatically preserved
5. No additional configuration required
### Upgrade from 1.1.2 or Earlier
Safe to upgrade directly. This version includes all features from v1.1.0, v1.1.1, and v1.1.2, plus the critical activation fix.
**Steps:**
1. Deactivate the current version
2. Upload and activate version 1.1.6
3. All existing settings and data will be automatically preserved
4. Enjoy all new features with working activation
### Can't Activate v1.1.3, v1.1.4, or v1.1.5?
If you downloaded v1.1.3, v1.1.4, or v1.1.5 and cannot activate it, **use v1.1.6 instead**.
**Steps:**
1. Delete the broken version from WordPress admin (if present)
2. Download `wc-tier-and-package-prices-1.1.6.zip`
3. Upload and activate version 1.1.6
4. Configuration and setup will work correctly
### Requirements
- **WordPress:** 6.0 or higher
- **PHP:** 7.4 or higher
- **WooCommerce:** 8.0 or higher (must be installed and activated)
## What Features Are Included
Version 1.1.6 includes **all features** from v1.1.0 through v1.1.4, with the critical activation bug fixed:
### Complete Package Restriction Feature
- ✅ Catalog pages: "View Options" button (v1.1.2 + v1.1.4 enhanced styling)
- ✅ Product page: Quantity field hiding and package selection (v1.1.0)
- ✅ Add to cart: Server-side validation (v1.1.0)
- ✅ Classic cart: Quantity field hiding (v1.1.1 + v1.1.3 fixes)
- ✅ WooCommerce Blocks: Cart and mini-cart support (v1.1.4)
- ✅ All features now work with correct activation (v1.1.6)
### Settings
- ✅ Global setting to enable restrictions site-wide
- ✅ Per-product override for individual products
- ✅ Located in: WooCommerce > Settings > Tier & Package Prices
## Modified Files in 1.1.6
### Core Files Updated
- `wc-tier-and-package-prices.php`:
- Added `init_classes()` method (lines 86-89)
- Modified `includes()` to defer class instantiation (line 83)
- No version number change (remains 1.1.6)
### PHP Classes Modified
- `includes/class-wc-tpp-cart.php`:
- Removed immediate instantiation (removed `new WC_TPP_Cart();` from bottom)
- `includes/class-wc-tpp-frontend.php`:
- Removed immediate instantiation (removed `new WC_TPP_Frontend();` from bottom)
### No Other Changes
- All functionality remains identical to v1.1.4
- No CSS changes
- No JavaScript changes
- No template changes
- No translation changes
- No feature changes
## 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)
- ✅ Working plugin activation (v1.1.6 - FIXED)
### 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)
### 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)
- ✅ User-friendly error messages
- ✅ WooCommerce HPOS compatible
- ✅ Theme/plugin conflict resistant
- ✅ WooCommerce Blocks compatible (v1.1.4)
- ✅ Proper plugin activation (v1.1.6 - FIXED)
## Breaking Changes
**None.** This release is fully backward compatible with v1.1.2 and all v1.0.x versions.
### About v1.1.3, v1.1.4, v1.1.5
These versions had activation bugs and should not be used. If you have them installed and working, upgrade to v1.1.6 for stability.
## Migration Notes
### From 1.1.5, 1.1.4, or 1.1.3
- Immediate upgrade recommended (critical bug fix)
- No functionality changes, only activation fix
- All settings preserved
- No configuration needed
### From 1.1.2 or Earlier
- All v1.1.0+ features included automatically
- Restriction features remain as configured
- WooCommerce Blocks now fully supported
- Plugin activation now works correctly
### 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.6** (2025-12-22) - Critical fix for plugin activation
- **v1.1.5** (2025-12-21) - Critical bug fix attempt (incomplete)
- **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.6
- Unable to activate plugin on fresh installations
- Unable to update from v1.1.2 or earlier with plugin deactivated
- Fatal errors during activation process
- Plugin unusable for new users
### After v1.1.6
- Plugin activates correctly on all WordPress installations
- Safe updates from any previous version
- All features work as intended
- Production ready for all users
## Recommendation
### For New Users
-**Use v1.1.6** - Latest stable version with all features and working activation
### For Users on v1.1.5, v1.1.4, or v1.1.3
- ⚠️ **Upgrade to v1.1.6** - Critical bug fix for stability
### For Users on v1.1.2 or Earlier
-**Upgrade to v1.1.6** - Get all new features plus stable activation
## Support
- **Documentation:** See README.md and CHANGELOG.md
- **Previous Release:** See RELEASE-INFO-1.1.4.md
- **Issues:** https://src.bundespruefstelle.ch/magdev/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.6 is a **critical update** for anyone on v1.1.3, v1.1.4, or v1.1.5. The plugin activation bug is now fixed and all features work correctly.

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

Binary file not shown.

View File

@@ -0,0 +1 @@
dbea10acffdc849f9aa387d128cb6d6e wc-tier-and-package-prices-1.1.6.zip

View File

@@ -0,0 +1 @@
730e366764449ac963bc85848ac8a91f654e4b35500ed3132a280ab4f215c80c wc-tier-and-package-prices-1.1.6.zip

View File

@@ -24,5 +24,13 @@
placeholder="{{ 'e.g., 9.99'|__('wc-tier-package-prices') }}"
class="short wc_input_price">
</p>
<p class="form-field">
<label>{{ 'Label (Optional)'|__('wc-tier-package-prices') }}</label>
<input type="text"
name="_wc_tpp_tiers[{{ index|esc_attr }}][label]"
value="{{ tier.label|default('')|esc_attr }}"
placeholder="{{ 'e.g., Wholesale'|__('wc-tier-package-prices') }}"
class="short">
</p>
<button type="button" class="button wc-tpp-remove-tier">{{ 'Remove'|__('wc-tier-package-prices') }}</button>
</div>

View File

@@ -25,7 +25,12 @@
{% set savings_percent = (savings / regular_price) * 100 %}
{% endif %}
<tr data-min-qty="{{ tier.min_qty|esc_attr }}" data-price="{{ tier.price|esc_attr }}">
<td>{{ tier.min_qty|esc_html }}+</td>
<td>
{{ tier.min_qty|esc_html }}+
{% if tier.label is defined and tier.label is not empty %}
<br><small class="wc-tpp-tier-label">{{ tier.label|esc_html }}</small>
{% endif %}
</td>
<td>{{ wc_price(tier.price)|raw }}</td>
<td>
{% if savings > 0 %}

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.5
* Version: 1.1.7
* 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.5');
define('WC_TPP_VERSION', '1.1.7');
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() {