Files
wc-composable-product/CHANGELOG.md
magdev 58f5329bc4 Bump version to 1.1.10 - Fix admin and frontend critical bugs
Two critical bug fixes after v1.1.9 release:
1. Admin tabs both visible on initial page load
2. Frontend product selector showing no products

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 22:38:42 +01:00

12 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.1.10] - 2025-12-31

Fixed

  • CRITICAL: Admin panel - Both General and Composable tabs visible simultaneously on initial page load
  • CRITICAL: Frontend - No products showing in product selector, only cart button and pricing visible
  • Empty product grid now shows helpful message instead of blank space

Changed

  • Added explicit display: none to #composable_product_data panel for proper initial hiding
  • Panel now only shows when body.product-type-composable class is present
  • Added empty state message in product selector template when no products are configured
  • Cleared Twig cache to ensure template changes take effect

Added

  • Empty state message: "No products available for selection. Please configure the product criteria in the admin panel."
  • Translations for empty state message in all 6 supported locales (de_DE, de_DE_informal, de_CH, de_CH_informal, fr_CH, it_CH)
  • Recompiled .mo translation files

Technical

  • Modified files: assets/css/admin.css (lines 7-16), templates/product-selector.twig (lines 12-15)
  • Root cause (admin): Panel lacked explicit CSS hiding rule, relied only on hidden class
  • Root cause (frontend): No feedback when products array is empty
  • Solution: CSS specificity + empty state conditional in Twig template

Notes

  • This release fixes two critical bugs discovered immediately after v1.1.9
  • Admin interface now correctly hides composable panel until product type is selected
  • Frontend provides clear user feedback when product selection is unavailable
  • All translation files now 100% complete (57/57 strings)

[1.1.9] - 2025-12-31

Fixed

  • CRITICAL: Admin rendering completely broken - tabs disappeared and fields appeared out of context after v1.1.8 release
  • CSS selectors were too broad, hiding tab navigation along with field groups
  • Removed !important flags that caused overly aggressive hiding

Changed

  • Made CSS selectors more specific: .options_group.show_if_composable for field groups only
  • Added separate rule for tab links: .product_data_tabs li.composable_options
  • Tab navigation now works correctly without hiding itself

Technical

  • Modified files: assets/css/admin.css (lines 22-40)
  • Root cause: .show_if_composable class used by WooCommerce for both tab links AND field groups
  • Solution: Separate selectors for each use case to prevent unintended hiding

Notes

  • This release fixes critical regression introduced in v1.1.8
  • Admin interface now renders correctly with visible tabs and properly positioned fields
  • No !important flags needed with specific selectors

[1.1.8] - 2025-12-31

Fixed

  • CRITICAL: Admin rendering bug where both General and Composable Options tabs showed simultaneously on initial page load
  • CRITICAL: Frontend product selector not appearing on product pages - WooCommerce's default add-to-cart button now hidden for composable products
  • CRITICAL: Price formatting not localized - prices now display with proper currency symbols, decimal separators, and thousand separators for all locales

Added

  • wc_price() Twig function for proper price formatting in templates
  • formatPrice() JavaScript method with full WooCommerce locale support
  • Price format localization data passed to frontend JavaScript (decimal/thousand separators, currency position, number of decimals)
  • hide_default_add_to_cart() method to prevent WooCommerce's default purchase UI for composable products

Changed

  • Enhanced CSS specificity with !important flags for proper tab visibility control
  • Template now uses {{ fixed_price_html|raw }} instead of raw currency concatenation
  • Product selector passes pre-formatted price HTML from wc_price() function
  • Frontend JavaScript updates prices dynamically using WooCommerce format settings

Technical

  • Modified files: assets/css/admin.css (+24 lines), includes/Cart_Handler.php (+14 lines), includes/Plugin.php (+7 lines), includes/Product_Selector.php (+2 lines), templates/product-selector.twig, assets/js/frontend.js (+28 lines)
  • All PHP files pass syntax validation
  • Supports Swiss format (CHF 50.-), European format (50,00 €), US format ($50.00), and all other WooCommerce locales
  • Thousand separator support: comma (1,000), dot (1.000), apostrophe (1'000), space (1 000)

Notes

  • This release fixes all three critical UI bugs reported in CLAUDE.md
  • Admin tabs now display correctly on initial page load without JavaScript flicker
  • Frontend product selector is now the only purchase interface (no WooCommerce default button)
  • All prices maintain proper locale formatting during dynamic updates

[1.1.7] - 2025-12-31

Added

  • Compiled .mo translation files for all 6 supported locales (de_DE, de_DE_informal, de_CH, de_CH_informal, fr_CH, it_CH)
  • WordPress can now load translations in admin and frontend areas

Fixed

  • CRITICAL: Missing translations in WordPress admin when using non-English locales
  • Settings page ("Composable Products", "Default Selection Limit", etc.) now properly translated
  • Product settings ("Composable Options", "Selection Criteria", etc.) now properly translated

Technical

  • Compiled .mo files from .po sources using msgfmt
  • All 6 locales now have complete translation coverage (56/56 strings translated and compiled)
  • .mo files required for WordPress i18n system to display translations

Notes

  • Previous versions included .po translation files but WordPress requires compiled .mo files
  • This release makes all existing translations actually visible to users

[1.1.6] - 2025-12-31

Added

  • Complete translations for all admin area strings across all 6 supported locales
  • "Fixed Price" field label and description translations

Changed

  • Updated translation template (.pot) to version 1.1.6
  • Simplified "How to calculate the price" description text

Technical

  • All .po files now include translations for v1.1.4 admin strings
  • 100% translation coverage maintained across all locales (56/56 strings)
  • German formal/informal variants properly differentiated (Sie vs. du)

[1.1.5] - 2025-12-31

Fixed

  • CRITICAL: Fixed Twig template error "Unknown 'esc_attr' filter" when rendering product selector
  • Template compatibility issue when other plugins (e.g., WooCommerce Tier and Package Prices) use Twig
  • WordPress escaping functions now properly registered as both Twig functions AND filters

Technical

  • Added TwigFilter registrations for esc_html, esc_attr, and esc_url in Plugin::init_twig()
  • Template can now use both syntax styles: {{ value|esc_attr }} (filter) and {{ esc_attr(value) }} (function)
  • Prevents conflicts when multiple plugins bundle their own Twig installations

Notes

  • Previous versions only registered escaping functions as Twig functions, not filters
  • Template used filter syntax (|esc_attr) which failed when parsed by external Twig instances
  • Fix ensures compatibility regardless of which Twig instance processes the template

[1.1.4] - 2025-12-31

Added

  • Fixed price field in Composable Options tab for easier price configuration
  • JavaScript toggle to show/hide fixed price field based on selected pricing mode

Changed

  • Simplified pricing mode description text in admin interface
  • Fixed price field now appears dynamically when "Fixed" pricing mode is selected

Technical

  • Added _regular_price field with composable_fixed_price_field CSS class in Product_Data.php
  • Implemented toggleFixedPriceField() JavaScript function in assets/js/admin.js
  • Progressive disclosure pattern improves admin UX by showing relevant fields only

[1.1.3] - 2024-12-31

Added

  • WooCommerce HPOS (High-Performance Order Storage) compatibility declaration
  • Prevents duplicate price calculations to avoid conflicts with other pricing plugins

Fixed

  • WooCommerce compatibility warnings with Analytics and other WooCommerce extensions
  • Price calculation conflicts with third-party pricing plugins

Technical

  • Added before_woocommerce_init hook to declare HPOS compatibility
  • Implemented static flag in Cart_Handler::calculate_cart_item_price() to prevent multiple executions
  • Added composable_price_calculated flag to cart items to prevent re-calculation by other plugins
  • Ensures composable products work with WooCommerce's modern order storage system

[1.1.2] - 2024-12-31

Fixed

  • CRITICAL: Fixed persistent "Class WC_Settings_Page not found" error that continued in v1.1.1
  • Root cause: Settings.php was being included too early (during plugin init) before WC_Settings_Page was loaded
  • Solution: Delayed Settings.php inclusion until woocommerce_get_settings_pages filter when class is guaranteed to exist

Technical

  • Removed require_once Settings.php from Plugin::includes() (line 93)
  • Added require_once Settings.php to Plugin::add_settings_page() (line 196)
  • Settings file now loads on-demand when WooCommerce requests settings pages
  • Previous hook change (woocommerce_init) was insufficient - class loading order was the real issue

Notes

  • v1.1.1 attempted to fix this with hook change but the error persisted
  • This version addresses the actual root cause: premature class extension

[1.1.1] - 2024-12-31

Fixed

  • Settings page initialization timing issue causing "Class WC_Settings_Page not found" error
  • Changed hook from woocommerce_loaded to woocommerce_init to ensure WC_Settings_Page class is available
  • Plugin now initializes after all WooCommerce core classes are loaded

Technical

  • Hook changed from woocommerce_loaded to woocommerce_init in wc-composable-product.php:65
  • woocommerce_init fires after WooCommerce has finished loading all its core classes including settings

[1.1.0] - 2024-12-31

Added

  • Stock Management Integration: Complete inventory tracking system for composable products
    • Stock validation during product selection and add-to-cart
    • Automatic stock deduction when orders are completed/processed
    • Automatic stock restoration on order cancellation/refund
    • Stock status indicators in product selector (In stock, Low stock, Out of stock)
    • Visual feedback for out-of-stock items (disabled checkboxes, reduced opacity)
    • Low stock warnings when 5 or fewer items remain
    • Prevention of out-of-stock item selection
    • Order notes documenting stock changes

Technical

  • New Stock_Manager class handling all stock operations
  • Integration with WooCommerce order status hooks
  • Stock information passed to frontend via Twig template
  • Enhanced CSS styling for stock status badges
  • Stock data stored in order item meta for accurate tracking
  • Backorder support detection and handling

Translation

  • Added 8 new translatable strings for stock messages
  • Updated Italian (Switzerland) translation with stock-related terms
  • Updated translation template (.pot file)

[1.0.1] - 2024-12-31

Fixed

  • Fatal error "Class WC_Settings_Page not found" during plugin activation
  • Changed initialization hook from plugins_loaded to woocommerce_loaded to ensure WooCommerce classes are available before plugin initialization
  • Settings page now correctly integrates as a tab in WooCommerce > Settings

Technical

  • Plugin now waits for woocommerce_loaded action before initializing
  • Prevents race condition where WooCommerce classes weren't loaded yet
  • Settings tab appears correctly in WooCommerce settings interface

1.0.0 - 2024-12-31

Added

  • Initial release
  • Composable product type for WooCommerce
  • Product selection by category, tag, or SKU
  • Configurable selection limits (global and per-product)
  • Two pricing modes: fixed price or sum of selected products
  • Admin settings page
  • Frontend product selector with grid layout
  • AJAX add-to-cart functionality
  • Twig template engine integration
  • Full internationalization support
  • Responsive design
  • WooCommerce cart integration
  • Product data validation

Features

  • Select products from predefined categories, tags, or SKUs
  • Limit number of items customers can select
  • Visual product selector with images and prices
  • Real-time price calculation
  • Clean, modern UI
  • Mobile responsive
  • Translation ready