Added localhost/self-licensing license bypass and WordPress auto-update
integration from license server.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Upgraded from LicenseClient to SecureLicenseClient with HMAC-SHA256 response signature verification
- Added Server Secret configuration field for secure communication
- Added rate limit exception handling with retry time display
- Added signature verification error handling
- Added URL validation error handling (SSRF protection)
- Updated all translation files with new strings
- Compiled .mo files for all 7 language variants
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Breaking Changes:
- PHP 8.3+ now required (previously 7.4+)
Added:
- License management integration using magdev/wc-licensed-product-client
- Settings page split into General and License sub-tabs
- License validation and activation via AJAX
- PHP version check with admin notice
Changed:
- Refactored settings class to use modern WooCommerce patterns
- Updated all translations with new license-related strings
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added translations for variable product parent pricing features:
- "Default Tier & Package Pricing for All Variations"
- "Set default pricing for all variations. Individual variations can override these defaults with their own specific pricing."
- "Configure default tier and package pricing here. All variations will inherit these settings unless they define their own specific pricing."
- "Restrict to Package Quantities (Default)"
- "Default restriction setting for all variations. Only allow quantities defined in packages above."
Updated all available language files:
- wc-tier-package-prices.pot (v1.2.7)
- de_CH, de_CH_informal, de_DE, de_DE_informal (German)
- fr_CH (French, Switzerland)
- it_CH (Italian, Switzerland)
- en_US (English, US)
Compiled all .po files to .mo for production use.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
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>
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>
Enhanced package quantity restriction enforcement by replacing "Add to Cart"
buttons with "View Options" links on catalog pages for products with
quantity restrictions. This prevents customers from attempting to add
restricted products directly from shop/category pages.
Changes:
- Added catalog button modification for restricted products
- Implemented "View Options" button with eye icon styling
- Created has_quantity_restriction() helper method
- Extended CSS loading to all WooCommerce pages
- Added modify_catalog_add_to_cart_button() filter method
- Updated translations with 2 new strings (en_US, de_DE, de_CH_informal)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Enhanced package quantity restriction enforcement by hiding the cart
quantity input field when restrictions are enabled. This prevents
customers from modifying quantities in the cart to bypass package
restrictions.
Changes:
- Added cart quantity input hiding for restricted products
- Implemented woocommerce_cart_item_quantity filter hook
- Created maybe_hide_cart_quantity_input() method in WC_TPP_Cart
- Fixed cart quantity bypass vulnerability
- Cart displays quantity as read-only text for restricted products
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>