Files
wc-composable-product/CHANGELOG.md
magdev 8fc0614334 Fix critical Twig filter error in product selector template
Fixed "Unknown 'esc_attr' filter" error that occurred when rendering
the product selector template. The issue was caused by WordPress
escaping functions being registered only as Twig functions, not filters.

Changes:
- Added TwigFilter registrations for esc_html, esc_attr, esc_url
- Template now supports both filter syntax (|esc_attr) and function syntax
- Fixes compatibility issues when other plugins use their own Twig instances
- Version bump to 1.1.5

This resolves the bug documented in logs/fatal-errors-2025-12-31.log

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

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

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