You've already forked wc-composable-product
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>
This commit is contained in:
38
CHANGELOG.md
38
CHANGELOG.md
@@ -5,6 +5,44 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [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
|
## [1.1.3] - 2024-12-31
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -84,6 +84,11 @@ class Plugin {
|
|||||||
$this->twig->addFunction(new \Twig\TwigFunction('esc_html', 'esc_html'));
|
$this->twig->addFunction(new \Twig\TwigFunction('esc_html', 'esc_html'));
|
||||||
$this->twig->addFunction(new \Twig\TwigFunction('esc_attr', 'esc_attr'));
|
$this->twig->addFunction(new \Twig\TwigFunction('esc_attr', 'esc_attr'));
|
||||||
$this->twig->addFunction(new \Twig\TwigFunction('esc_url', 'esc_url'));
|
$this->twig->addFunction(new \Twig\TwigFunction('esc_url', 'esc_url'));
|
||||||
|
|
||||||
|
// Add WordPress escaping functions as Twig filters
|
||||||
|
$this->twig->addFilter(new \Twig\TwigFilter('esc_html', 'esc_html'));
|
||||||
|
$this->twig->addFilter(new \Twig\TwigFilter('esc_attr', 'esc_attr'));
|
||||||
|
$this->twig->addFilter(new \Twig\TwigFilter('esc_url', 'esc_url'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* Plugin Name: WooCommerce Composable Products
|
* Plugin Name: WooCommerce Composable Products
|
||||||
* Plugin URI: https://github.com/magdev/wc-composable-product
|
* Plugin URI: https://github.com/magdev/wc-composable-product
|
||||||
* Description: Create composable products where customers select a limited number of items from a configurable set
|
* Description: Create composable products where customers select a limited number of items from a configurable set
|
||||||
* Version: 1.1.3
|
* Version: 1.1.5
|
||||||
* Author: Marco Graetsch
|
* Author: Marco Graetsch
|
||||||
* Author URI: https://example.com
|
* Author URI: https://example.com
|
||||||
* License: GPL v3 or later
|
* License: GPL v3 or later
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
defined('ABSPATH') || exit;
|
defined('ABSPATH') || exit;
|
||||||
|
|
||||||
// Define plugin constants
|
// Define plugin constants
|
||||||
define('WC_COMPOSABLE_PRODUCT_VERSION', '1.1.3');
|
define('WC_COMPOSABLE_PRODUCT_VERSION', '1.1.5');
|
||||||
define('WC_COMPOSABLE_PRODUCT_FILE', __FILE__);
|
define('WC_COMPOSABLE_PRODUCT_FILE', __FILE__);
|
||||||
define('WC_COMPOSABLE_PRODUCT_PATH', plugin_dir_path(__FILE__));
|
define('WC_COMPOSABLE_PRODUCT_PATH', plugin_dir_path(__FILE__));
|
||||||
define('WC_COMPOSABLE_PRODUCT_URL', plugin_dir_url(__FILE__));
|
define('WC_COMPOSABLE_PRODUCT_URL', plugin_dir_url(__FILE__));
|
||||||
|
|||||||
Reference in New Issue
Block a user