You've already forked wc-tier-and-package-prices
Release version 1.1.18 - Fix root cause of duplicate settings
Identified and fixed the actual root cause of duplicate settings page: automatic instantiation in settings file being executed multiple times. Root Cause Analysis: - Settings file ended with: return new WC_TPP_Settings(); - File is in Composer's classmap for autoloading - When autoloader loads class, it executes the entire file including instantiation - Each include/autoload created a NEW instance despite admin singleton pattern - Admin singleton prevented multiple admin instances but not multiple settings instances The Fix: - Removed automatic instantiation (return new) from settings file - Settings file now only contains class definition - Admin class explicitly creates instance: new WC_TPP_Settings() - Changed from include to require_once to prevent multiple file loads - Settings instance now created exactly once, when filter needs it Fixes: - Settings page rendering twice in WooCommerce backend - Multiple WC_TPP_Settings instances being created - Composer autoload triggering unintended instantiation Changes: - Removed line 145 from class-wc-tpp-settings.php (return new WC_TPP_Settings()) - Modified add_settings_page() to use require_once + explicit new - Settings file now side-effect free, safe for autoloading Technical Details: - Composer classmap autoloader includes files when class is referenced - Previous code had side effect (instantiation) on every include - New code separates class definition from instantiation - Instance creation now controlled explicitly by admin class - require_once ensures file loaded once even if accessed multiple times Updated Files: - includes/class-wc-tpp-settings.php (removed return new line) - includes/class-wc-tpp-admin.php (explicit instantiation) - wc-tier-and-package-prices.php (version 1.1.18) - composer.json (version 1.1.18) - CHANGELOG.md (v1.1.18 section) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
22
CHANGELOG.md
22
CHANGELOG.md
@@ -5,6 +5,28 @@ All notable changes to WooCommerce Tier and Package Prices will be documented in
|
||||
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).
|
||||
|
||||
## [1.1.18] - 2025-12-22
|
||||
|
||||
### Fixed
|
||||
|
||||
- **ROOT CAUSE IDENTIFIED**: Settings page rendering twice due to automatic instantiation in settings file
|
||||
- Settings file being included multiple times via Composer autoloader creating duplicate instances
|
||||
|
||||
### Changed
|
||||
|
||||
- Removed `return new WC_TPP_Settings();` from bottom of settings file
|
||||
- Changed admin class to explicitly instantiate settings with `new WC_TPP_Settings()`
|
||||
- Changed from `include` to `require_once` for settings file to prevent multiple loads
|
||||
|
||||
### Technical Details
|
||||
|
||||
- Settings file (class-wc-tpp-settings.php) was creating instance automatically on include
|
||||
- File is in Composer's classmap, so when autoloaded it executed instantiation again
|
||||
- Each include/autoload created new instance even with singleton pattern in admin class
|
||||
- Solution: Remove automatic instantiation, use `require_once` + explicit `new` in admin class
|
||||
- Now settings instance only created once, explicitly, when needed by filter
|
||||
- Composer autoload can load class definition without side effects
|
||||
|
||||
## [1.1.17] - 2025-12-22
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in New Issue
Block a user