You've already forked wc-tier-and-package-prices
Release version 1.1.16 - Singleton pattern for settings page
Fixed persistent duplicate settings page rendering by implementing proper singleton pattern for admin class and caching settings instance. Fixes: - Settings page still appearing twice despite v1.1.15 fix - Multiple instantiation of WC_TPP_Admin class - Duplicate creation of WC_TPP_Settings instances Changes: - Implemented singleton pattern for WC_TPP_Admin class - Added private static $instance property with get_instance() method - Made WC_TPP_Admin constructor private - Added static $settings_instance property to cache settings page - Modified add_settings_page() to check and reuse cached settings instance - Changed instantiation from new WC_TPP_Admin() to WC_TPP_Admin::get_instance() Technical Details: - Ensures only one WC_TPP_Admin instance exists throughout plugin lifecycle - Prevents duplicate filter registrations even if woocommerce_get_settings_pages called multiple times - Settings page object created once and reused on subsequent filter calls - Follows WordPress/WooCommerce best practices for singleton implementation Updated Files: - includes/class-wc-tpp-admin.php (singleton pattern implementation) - wc-tier-and-package-prices.php (version 1.1.16) - composer.json (version 1.1.16) - CHANGELOG.md (v1.1.16 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:
@@ -10,7 +10,17 @@ if (!defined('ABSPATH')) {
|
||||
if (!class_exists('WC_TPP_Admin')) {
|
||||
class WC_TPP_Admin {
|
||||
|
||||
public function __construct() {
|
||||
private static $instance = null;
|
||||
private static $settings_instance = null;
|
||||
|
||||
public static function get_instance() {
|
||||
if (null === self::$instance) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
private function __construct() {
|
||||
add_filter('woocommerce_get_settings_pages', array($this, 'add_settings_page'));
|
||||
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
|
||||
}
|
||||
@@ -19,7 +29,10 @@ if (!class_exists('WC_TPP_Admin')) {
|
||||
* Add settings page to WooCommerce settings
|
||||
*/
|
||||
public function add_settings_page($settings) {
|
||||
$settings[] = include WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-settings.php';
|
||||
if (null === self::$settings_instance) {
|
||||
self::$settings_instance = include WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-settings.php';
|
||||
}
|
||||
$settings[] = self::$settings_instance;
|
||||
return $settings;
|
||||
}
|
||||
|
||||
@@ -31,5 +44,5 @@ if (!class_exists('WC_TPP_Admin')) {
|
||||
}
|
||||
}
|
||||
|
||||
new WC_TPP_Admin();
|
||||
WC_TPP_Admin::get_instance();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user