Added two new critical sections documenting lessons learned during v1.2.8 development: 1. Currency Symbol Display - Proper pattern for displaying currency in table headers using printf() - How to pass currency_symbol to Twig templates - Correct concatenation in Twig placeholders - List of affected render methods 2. Post Meta Deletion vs. Empty Arrays - Explains WordPress distinction between deleted meta and empty arrays - Shows wrong pattern (saving empty arrays) vs correct pattern (deleting meta) - Why this matters for database cleanliness and bug prevention - Affected methods in save_tier_package_fields() and save_variation_pricing_fields() These patterns prevent future bugs and ensure consistent implementation across the codebase. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
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
Tier Pricing (Volume Discounts)
- Set quantity-based pricing tiers
- Automatic discounts when customers buy in larger quantities
- Display savings percentage and amount
- Dynamically updates price based on quantity selected
Package Pricing
- Create fixed-price packages with specific quantities
- Example: 10 pieces for $50, 25 pieces for $100
- Custom labels for packages (e.g., "Starter Pack", "Value Bundle")
- One-click package selection on product pages
Admin Features
- Easy-to-use product meta boxes for adding tiers and packages
- Global settings page under WooCommerce menu
- Configure display position (before/after add to cart, after price)
- Enable/disable tier or package pricing independently
- Sortable pricing rules
Frontend Features
- Beautiful pricing tables on product pages
- Responsive design for mobile devices
- Visual highlighting of active tier/package
- Real-time price updates when quantity changes
- Cart integration with proper price calculations
- Clear pricing indicators in cart
Installation
- Upload the
wc-tier-and-package-pricesfolder to the/wp-content/plugins/directory - Activate the plugin through the 'Plugins' menu in WordPress
- Make sure WooCommerce is installed and activated
Configuration
Global Settings
Navigate to WooCommerce > Tier & Package Prices to configure:
- Enable Tier Pricing: Turn on/off volume discounts
- Enable Package Pricing: Turn on/off fixed-price packages
- Display Pricing Table: Show/hide pricing tables on product pages
- Display Position: Choose where to show pricing tables
Product Settings
When editing a product, scroll to the Product data panel:
- Click on the General tab
- Scroll down to find Tier Pricing and Package Pricing sections
Adding Tier Pricing
- Click "Add Tier" button
- Set minimum quantity (e.g., 10)
- Set price per unit (e.g., 9.99)
- Add more tiers as needed
- Tiers are automatically sorted by quantity
Example:
- 1-9 items: $12.00 each (regular price)
- 10-24 items: $10.00 each (tier 1)
- 25-49 items: $8.50 each (tier 2)
- 50+ items: $7.00 each (tier 3)
Adding Package Pricing
- Click "Add Package" button
- Set exact quantity (e.g., 10)
- Set fixed price for that quantity (e.g., 99.99)
- Optionally add a custom label (e.g., "Starter Pack")
- Add more packages as needed
Example:
- Package 1: 10 pieces for $95 (labeled "Small Bundle")
- Package 2: 25 pieces for $200 (labeled "Value Pack")
- Package 3: 50 pieces for $350 (labeled "Business Pack")
How It Works
Price Calculation Priority
- Package Price (highest priority): If the exact quantity matches a package, the package price applies
- Tier Price: If no package match, the highest applicable tier price is used
- Regular Price: If no tier or package applies, the regular product price is used
Frontend Display
- Pricing tables show all available tiers and packages
- Current tier/package is highlighted based on selected quantity
- Prices update dynamically when quantity changes
- Package buttons allow one-click quantity selection
Cart Behavior
- Correct prices are applied in the cart
- Cart shows whether tier or package pricing is applied
- Subtotals are calculated correctly
- Compatible with WooCommerce checkout process
File Structure
wc-tier-and-package-prices/
├── wc-tier-and-package-prices.php # Main plugin file (v1.1.20)
├── includes/
│ ├── class-wc-tpp-admin.php # Admin settings integration
│ ├── class-wc-tpp-settings.php # WooCommerce settings page
│ ├── class-wc-tpp-product-meta.php # Product meta boxes
│ ├── class-wc-tpp-frontend.php # Frontend display logic
│ ├── class-wc-tpp-cart.php # Cart price calculations
│ └── class-wc-tpp-template-loader.php # Twig template engine
├── templates/
│ ├── admin/
│ │ ├── tier-row.twig # Tier pricing input row
│ │ └── package-row.twig # Package pricing input row
│ └── frontend/
│ ├── pricing-table.twig # Main pricing display wrapper
│ ├── tier-pricing-table.twig # Tier pricing table
│ └── package-pricing-display.twig # Package selection UI
├── assets/
│ ├── css/
│ │ ├── admin.css # Admin styles
│ │ └── frontend.css # Frontend styles
│ └── js/
│ ├── admin.js # Admin JavaScript
│ └── frontend.js # Frontend JavaScript
├── languages/
│ ├── wc-tier-package-prices.pot # Translation template
│ ├── wc-tier-package-prices-*.po # Translation sources
│ └── wc-tier-package-prices-*.mo # Compiled translations
├── vendor/ # Composer dependencies (Twig)
├── CHANGELOG.md # Complete version history
├── INSTALLATION.md # Installation guide
├── QUICKSTART.md # Quick start guide
├── USAGE_EXAMPLES.md # Usage examples
└── README.md # This file
Requirements
- WordPress 6.0 or higher (tested up to 6.9.x)
- WooCommerce 8.0 or higher (tested up to 10.x)
- PHP 7.4 or higher
Compatibility
- ✅ WooCommerce 10.x: Fully compatible with the latest WooCommerce release
- ✅ WordPress 6.9.x: Tested and verified with WordPress 6.9.x
- ✅ HPOS (High-Performance Order Storage): Full support for WooCommerce Custom Order Tables
- ✅ Block-based Themes: Compatible with modern WordPress block themes
- ✅ Multisite: Works on WordPress multisite installations
Frequently Asked Questions
Q: Can I use both tier pricing and package pricing on the same product? A: Yes! Package pricing takes priority when the exact quantity matches.
Q: What happens if a customer changes the quantity in the cart? A: The price will automatically recalculate based on the new quantity.
Q: Can I set different tiers for different products? A: Yes, each product can have its own tier and package pricing configuration.
Q: Does this work with variable products? A: Yes! Since version 1.2.0, the plugin fully supports variable products. Each variation can have its own independent tier and package pricing configuration.
Support
For bug reports and feature requests, please use the plugin's support forum or contact the developer.
License
This plugin is licensed under the GPL v2 or later.
Changelog
Version 1.2.0 - 2025-12-29
Current Release - Variable Product Support
- New: Full support for WooCommerce variable products with variation-level pricing
- New: Each variation can have independent tier and package pricing configuration
- New: AJAX-powered dynamic pricing table display when variations are selected
- Changed: Admin templates converted to table structure for better layout
- Fixed: Quantity restrictions now work correctly per-variation
- 100% backward compatible - no breaking changes
See CHANGELOG.md for complete details.
Version 1.1.22 - 2025-12-23
- Increased width of label input fields in admin interface
Fixed
- CRITICAL: WooCommerce Blocks fatal error in mini-cart and cart blocks
- Fixed
woocommerce_store_api_product_quantity_editablefilter signature mismatch - Filter now correctly accepts
WC_Productobject instead of cart item array - Resolves "Cannot use object of type WC_Product_Simple as array" fatal error
Technical Details
- Updated
block_quantity_editable()method signature to accept product object - Changed parameter from
$cart_itemarray toWC_Product $product - Uses
$product->get_id()instead of array access for product ID - Full compatibility with WooCommerce Store API and block-based cart/checkout
Recent Major Updates
Version 1.1.7 - Enhanced Tier Pricing
- Added optional text labels for tier pricing
- Clickable tier rows that auto-populate quantity field
- Add to Cart button auto-disable when quantity is invalid
Version 1.1.4 - WooCommerce Blocks Support
- Full support for WooCommerce block-based cart and checkout
- Quantity restrictions work with both classic and block carts
- Enhanced "View Options" button styling
Version 1.1.0 - Package Quantity Restrictions
- Global and per-product package quantity restrictions
- Prevents customers from ordering non-package quantities
- Automatic quantity field hiding when restrictions enabled
Version 1.0.1 - Twig Template Engine
- Migrated to Twig templating system
- Enhanced security with automatic HTML escaping
- Added German (Switzerland, Informal) translation
Version 1.0.0 - Initial Release
- Tier pricing functionality (quantity-based discounts)
- Package pricing functionality (fixed-price bundles)
- WooCommerce HPOS compatibility
- Multilingual support (English, German)
For complete version history, see CHANGELOG.md
Credits
Developed by Marco Graetsch for WooCommerce store owners who need flexible pricing options.