Files
wc-composable-product/CHANGELOG.md
magdev 601570d724 Bump version to 1.1.7 for release
- Version 1.1.7 includes compiled .mo translation files
- Critical fix: Translations now display in WordPress admin
- All 6 locales (de_DE, de_DE_informal, de_CH, de_CH_informal, fr_CH, it_CH) fully functional

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 21:35:53 +01:00

7.8 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.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