You've already forked wc-tier-and-package-prices
Fixed critical function redeclaration error affecting versions 1.1.3-1.1.8 that caused fatal errors during plugin activation and deactivation. Fixes: - Function redeclaration error for wc_tpp_woocommerce_missing_notice() - Fatal error "Cannot redeclare function" when plugin file loaded multiple times - Plugin activation/deactivation failures Technical Changes: - Wrapped wc_tpp_woocommerce_missing_notice() in function_exists() check - Moved function declaration before WooCommerce check for better organization - Prevents fatal errors during WordPress plugin lifecycle events Updated Files: - wc-tier-and-package-prices.php (version 1.1.9, function safety check) - composer.json (version 1.1.9) - CHANGELOG.md (v1.1.9 section) - All translation files compiled (.mo files) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
11 KiB
11 KiB
Changelog
All notable changes to WooCommerce Tier and Package Prices will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.1.9] - 2025-12-22
Fixed
- CRITICAL: Function redeclaration error for
wc_tpp_woocommerce_missing_notice()affecting versions 1.1.3-1.1.8 - Fatal error "Cannot redeclare function wc_tpp_woocommerce_missing_notice()" when plugin file loaded multiple times
- Plugin activation and deactivation failures caused by function redeclaration
Technical Details
- Wrapped
wc_tpp_woocommerce_missing_notice()function infunction_exists()check - Prevents fatal error during WordPress plugin activation/deactivation cycles
- Ensures function can safely be declared even if file is included multiple times
- Moved function declaration before WooCommerce check for better code organization
[1.1.8] - 2025-12-22
Fixed
- CRITICAL: Plugin activation fatal error introduced in v1.1.3-v1.1.7
- Fixed premature class instantiation of
WC_TPP_AdminandWC_TPP_Product_Meta - Both classes now instantiated via
woocommerce_loadedhook after WooCommerce is available - Resolves WordPress 6.9.x and WooCommerce 10.x compatibility issues
Technical Details
- Removed
new WC_TPP_Admin();from bottom of class-wc-tpp-admin.php - Removed
new WC_TPP_Product_Meta();from bottom of class-wc-tpp-product-meta.php - Added both classes to
init_classes()method in main plugin file - All four main classes (Admin, Product Meta, Frontend, Cart) now follow same initialization pattern
- Ensures WooCommerce hooks are available before registration
[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
labelfield 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-labelstyling 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.phpandclass-wc-tpp-frontend.php
Technical
- Moved
WC_TPP_CartandWC_TPP_Frontendinstantiation towoocommerce_loadedhook - Added
init_classes()method to main plugin class for controlled class initialization - Ensures WooCommerce is fully loaded before registering hooks that depend on WC functions
- Fixed hook registration timing to prevent accessing WooCommerce before it's available
[1.1.5] - 2025-12-21
Fixed
- CRITICAL: Plugin activation error in v1.1.3 and v1.1.4 caused by
add_cart_quantity_css()method - Fatal error when WooCommerce cart object not available during plugin initialization
- Frontend errors on admin pages and during activation
Technical
- Added
function_exists('WC')check before accessing WooCommerce functions - Added
is_admin()check to prevent CSS injection on admin pages - Enhanced error prevention in
add_cart_quantity_css()method
[1.1.4] - 2025-12-21
Added
- WooCommerce Blocks support for quantity restrictions
woocommerce_store_api_product_quantity_editablefilter for block-based cartsblock_quantity_editable()method in WC_TPP_Cart class- CSS targeting for
.wc-block-components-quantity-selectorelements
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_quantityfilter support for mini-cartadd_cart_quantity_css()method for dynamic CSS injectiondata-product-idattribute to quantity spans for targeted CSS selectors- CSS class
wc-tpp-restricted-qtyfor 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_headaction 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_linkfilter 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
- 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
Technical
- Added
maybe_hide_cart_quantity_input()method in WC_TPP_Cart class - Extended
woocommerce_cart_item_quantityfilter hook - CSS class
wc-tpp-cart-quantityfor styled quantity display
[1.1.0] - 2025-12-21
Added
- Package quantity restriction feature
- Global setting to restrict quantities to defined package sizes
- Per-product setting to restrict quantities to defined package sizes
- Frontend validation preventing non-package quantities
- Server-side cart validation for package quantities
- User-friendly error messages showing available package sizes
- Automatic quantity field hiding when restriction is enabled
- Package selection UI with highlighted states
Changed
- Enhanced package pricing display template with restriction mode support
- Improved JavaScript to handle restricted mode package selection
- Updated frontend to show "Choose a package size below" notice in restricted mode
Technical
- Added
validate_package_quantity()method in WC_TPP_Cart class - Added
maybe_hide_quantity_input()method in WC_TPP_Frontend class - Extended
woocommerce_add_to_cart_validationfilter hook - Added
wc-tpp-restricted-modeCSS class for styling - New product meta:
_wc_tpp_restrict_to_packages - New global option:
wc_tpp_restrict_package_quantities
Translations
- Added 7 new translatable strings
- Updated all translations (en_US, de_DE, de_CH_informal)
- Compiled all .mo files with new strings
[1.0.2] - 2025-12-21
Changed
- Migrated settings to WooCommerce Settings page as dedicated tab
- Settings now appear under WooCommerce > Settings > Tier & Package Prices
- Improved integration with WooCommerce native settings API
Added
- WC_TPP_Settings class extending WC_Settings_Page
- Better integration with WooCommerce settings system
- Consistent UI with other WooCommerce settings tabs
Removed
- Standalone settings submenu (WooCommerce > Tier & Package Prices)
- Custom settings template (templates/admin/settings-page.twig)
Technical
- Implemented WooCommerce settings filter hook (woocommerce_get_settings_pages)
- Uses WC_Admin_Settings for rendering and saving
- Automatic settings persistence via WooCommerce API
[1.0.1] - 2025-12-21
Added
- Twig template engine integration for all templates
- Template loader class with WordPress integration
- German (Switzerland, Informal) translation (de_CH_informal)
- Composer dependency management
- Comprehensive translation support in Twig templates
- Template caching support (disabled in debug mode)
Changed
- Migrated all PHP templates to Twig format (.twig)
- Improved template organization and separation of concerns
- Enhanced security with automatic HTML escaping in templates
- Updated composer.json with complete package metadata
Removed
- Old PHP template files (replaced with Twig)
Technical
- Added Twig v3.22.2 dependency
- Created WC_TPP_Template_Loader class for centralized template rendering
- Integrated WordPress functions (__(), e(), esc*, wc_price()) into Twig
- Added Swiss German localization with informal address form
- Organized templates into admin/ and frontend/ directories
[1.0.0] - 2025-12-21
Added
- Initial release
- Tier pricing functionality (quantity-based discounts)
- Package pricing functionality (fixed-price bundles)
- Admin settings page for plugin configuration
- Product meta boxes for configuring tier and package prices
- Frontend pricing tables display
- Cart integration for automatic price calculation
- WooCommerce HPOS compatibility
- Multilingual support with text domain
- German (Germany) translation (de_DE)
- English (US) translation (en_US)
Features
- Volume discounts based on quantity thresholds
- Fixed-price packages with custom labels
- Configurable display positions (before/after cart button, after price)
- Real-time price updates in cart
- Responsive pricing tables
- Admin-friendly interface for price management