diff --git a/CHANGELOG.md b/CHANGELOG.md index 98a35a2..55b456a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,26 @@ 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/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [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 diff --git a/includes/Plugin.php b/includes/Plugin.php index 3dac514..fd9cf29 100644 --- a/includes/Plugin.php +++ b/includes/Plugin.php @@ -90,7 +90,8 @@ class Plugin { * Include required files */ private function includes() { - require_once WC_COMPOSABLE_PRODUCT_PATH . 'includes/Admin/Settings.php'; + // Note: Settings.php is NOT included here because it extends WC_Settings_Page + // which isn't loaded until later. It's included in add_settings_page() instead. require_once WC_COMPOSABLE_PRODUCT_PATH . 'includes/Admin/Product_Data.php'; require_once WC_COMPOSABLE_PRODUCT_PATH . 'includes/Product_Type.php'; require_once WC_COMPOSABLE_PRODUCT_PATH . 'includes/Stock_Manager.php'; @@ -191,6 +192,8 @@ class Plugin { * @return array */ public function add_settings_page($settings) { + // Include Settings.php here, when WC_Settings_Page is guaranteed to be loaded + require_once WC_COMPOSABLE_PRODUCT_PATH . 'includes/Admin/Settings.php'; $settings[] = new Admin\Settings(); return $settings; } diff --git a/releases/releases/wc-composable-product-v1.0.0.zip b/releases/wc-composable-product-v1.0.0.zip similarity index 100% rename from releases/releases/wc-composable-product-v1.0.0.zip rename to releases/wc-composable-product-v1.0.0.zip diff --git a/releases/releases/wc-composable-product-v1.0.0.zip.md5 b/releases/wc-composable-product-v1.0.0.zip.md5 similarity index 100% rename from releases/releases/wc-composable-product-v1.0.0.zip.md5 rename to releases/wc-composable-product-v1.0.0.zip.md5 diff --git a/releases/releases/wc-composable-product-v1.0.0.zip.sha256 b/releases/wc-composable-product-v1.0.0.zip.sha256 similarity index 100% rename from releases/releases/wc-composable-product-v1.0.0.zip.sha256 rename to releases/wc-composable-product-v1.0.0.zip.sha256 diff --git a/releases/releases/wc-composable-product-v1.1.0.zip b/releases/wc-composable-product-v1.1.0.zip similarity index 100% rename from releases/releases/wc-composable-product-v1.1.0.zip rename to releases/wc-composable-product-v1.1.0.zip diff --git a/releases/releases/wc-composable-product-v1.1.0.zip.md5 b/releases/wc-composable-product-v1.1.0.zip.md5 similarity index 100% rename from releases/releases/wc-composable-product-v1.1.0.zip.md5 rename to releases/wc-composable-product-v1.1.0.zip.md5 diff --git a/releases/releases/wc-composable-product-v1.1.0.zip.sha256 b/releases/wc-composable-product-v1.1.0.zip.sha256 similarity index 100% rename from releases/releases/wc-composable-product-v1.1.0.zip.sha256 rename to releases/wc-composable-product-v1.1.0.zip.sha256 diff --git a/releases/releases/wc-composable-product-v1.1.1.zip b/releases/wc-composable-product-v1.1.1.zip similarity index 100% rename from releases/releases/wc-composable-product-v1.1.1.zip rename to releases/wc-composable-product-v1.1.1.zip diff --git a/releases/releases/wc-composable-product-v1.1.1.zip.md5 b/releases/wc-composable-product-v1.1.1.zip.md5 similarity index 100% rename from releases/releases/wc-composable-product-v1.1.1.zip.md5 rename to releases/wc-composable-product-v1.1.1.zip.md5 diff --git a/releases/releases/wc-composable-product-v1.1.1.zip.sha256 b/releases/wc-composable-product-v1.1.1.zip.sha256 similarity index 100% rename from releases/releases/wc-composable-product-v1.1.1.zip.sha256 rename to releases/wc-composable-product-v1.1.1.zip.sha256 diff --git a/wc-composable-product.php b/wc-composable-product.php index 6098f04..b643d70 100644 --- a/wc-composable-product.php +++ b/wc-composable-product.php @@ -3,7 +3,7 @@ * Plugin Name: WooCommerce Composable Products * 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 - * Version: 1.1.1 + * Version: 1.1.2 * Author: Marco Graetsch * Author URI: https://example.com * License: GPL v3 or later @@ -19,7 +19,7 @@ defined('ABSPATH') || exit; // Define plugin constants -define('WC_COMPOSABLE_PRODUCT_VERSION', '1.1.1'); +define('WC_COMPOSABLE_PRODUCT_VERSION', '1.1.2'); define('WC_COMPOSABLE_PRODUCT_FILE', __FILE__); define('WC_COMPOSABLE_PRODUCT_PATH', plugin_dir_path(__FILE__)); define('WC_COMPOSABLE_PRODUCT_URL', plugin_dir_url(__FILE__));