You've already forked wc-tier-and-package-prices
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 959229b9d8 | |||
| f0ab2ff755 | |||
| 4dd9b3cd62 | |||
| 9dab123209 | |||
| 3f117ae519 |
94
CHANGELOG.md
94
CHANGELOG.md
@@ -5,6 +5,100 @@ 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/),
|
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.15] - 2025-12-22
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Settings page rendering twice in WooCommerce settings
|
||||||
|
- Duplicate instantiation of WC_TPP_Settings class causing double rendering
|
||||||
|
|
||||||
|
### Technical Details
|
||||||
|
|
||||||
|
- Removed conditional `if (class_exists('WC_TPP_Settings'))` wrapper from settings return statement
|
||||||
|
- Settings class now only instantiated via `return new WC_TPP_Settings();` when included by admin class
|
||||||
|
- Matches v1.1.2 pattern where settings file returns instance without automatic instantiation
|
||||||
|
- Prevents double registration in WooCommerce settings pages array
|
||||||
|
|
||||||
|
## [1.1.14] - 2025-12-22
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **CRITICAL:** Plugin completely non-functional in v1.1.8-1.1.13 - no settings, no frontend, no backend
|
||||||
|
- Classes never instantiated due to incorrect initialization pattern introduced in v1.1.8
|
||||||
|
- Restored v1.1.2 pattern: classes auto-instantiate when files are included
|
||||||
|
- All plugin functionality now working: settings page, product meta boxes, frontend display, cart integration
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Reverted to direct class instantiation pattern from v1.1.2 (last known working version)
|
||||||
|
- Removed `init_classes()` method and `woocommerce_loaded` hook approach from v1.1.8
|
||||||
|
- Each class file now instantiates itself with `new ClassName()` at end of file
|
||||||
|
- Simplified plugin initialization for better reliability
|
||||||
|
|
||||||
|
### Technical Details
|
||||||
|
|
||||||
|
- Restored class instantiation in all 5 component files:
|
||||||
|
- `class-wc-tpp-admin.php`: Added `new WC_TPP_Admin();` after class declaration
|
||||||
|
- `class-wc-tpp-product-meta.php`: Added `new WC_TPP_Product_Meta();` after class declaration
|
||||||
|
- `class-wc-tpp-frontend.php`: Added `new WC_TPP_Frontend();` after class declaration
|
||||||
|
- `class-wc-tpp-cart.php`: Added `new WC_TPP_Cart();` after class declaration
|
||||||
|
- `class-wc-tpp-settings.php`: Already has instantiation via return statement
|
||||||
|
- Removed `init_classes()` method from main plugin class
|
||||||
|
- Removed `woocommerce_loaded` hook that delayed class instantiation
|
||||||
|
- Classes now instantiate immediately when `require_once` loads them
|
||||||
|
- All `class_exists()` guards remain in place for redeclaration protection
|
||||||
|
|
||||||
|
## [1.1.13] - 2025-12-22
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **CRITICAL:** Class redeclaration errors for all plugin component classes affecting version 1.1.12
|
||||||
|
- Fatal errors "Cannot redeclare class WC_TPP_Admin", "Cannot redeclare class WC_TPP_Product_Meta", "Cannot redeclare class WC_TPP_Frontend", "Cannot redeclare class WC_TPP_Cart", "Cannot redeclare class WC_TPP_Settings"
|
||||||
|
- Plugin functionality completely broken in v1.1.12 - no settings page, no frontend display, no backend controls
|
||||||
|
- All plugin features now working correctly after adding class guards
|
||||||
|
|
||||||
|
### Technical Details
|
||||||
|
|
||||||
|
- Wrapped all 5 plugin component class declarations in `class_exists()` checks:
|
||||||
|
- `WC_TPP_Admin` (includes/class-wc-tpp-admin.php)
|
||||||
|
- `WC_TPP_Product_Meta` (includes/class-wc-tpp-product-meta.php)
|
||||||
|
- `WC_TPP_Frontend` (includes/class-wc-tpp-frontend.php)
|
||||||
|
- `WC_TPP_Cart` (includes/class-wc-tpp-cart.php)
|
||||||
|
- `WC_TPP_Settings` (includes/class-wc-tpp-settings.php)
|
||||||
|
- Completes comprehensive redeclaration protection started in v1.1.9-1.1.12
|
||||||
|
- All functions, constants, and classes now fully protected against redeclaration
|
||||||
|
- Plugin now activates and functions correctly without fatal errors
|
||||||
|
|
||||||
|
## [1.1.12] - 2025-12-22
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **CRITICAL:** Class redeclaration error for `WC_Tier_Package_Prices` affecting version 1.1.11
|
||||||
|
- Fatal error "Cannot redeclare class WC_Tier_Package_Prices" when plugin file loaded multiple times
|
||||||
|
- Plugin activation failures caused by class redeclaration
|
||||||
|
|
||||||
|
### Technical Details
|
||||||
|
|
||||||
|
- Wrapped `WC_Tier_Package_Prices` class declaration in `class_exists()` check
|
||||||
|
- Completes comprehensive redeclaration protection for all plugin components
|
||||||
|
- Prevents fatal errors during WordPress plugin activation/deactivation cycles
|
||||||
|
- All functions, constants, and classes now safely guarded against redeclaration
|
||||||
|
|
||||||
|
## [1.1.11] - 2025-12-22
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **CRITICAL:** Constant redeclaration warnings/errors for plugin constants affecting versions 1.1.3-1.1.10
|
||||||
|
- Potential errors when plugin constants (WC_TPP_VERSION, WC_TPP_PLUGIN_DIR, etc.) already defined
|
||||||
|
- Plugin initialization failures caused by constant redeclaration
|
||||||
|
|
||||||
|
### Technical Details
|
||||||
|
|
||||||
|
- Wrapped all `define()` calls in `defined()` checks for WC_TPP_VERSION, WC_TPP_PLUGIN_DIR, WC_TPP_PLUGIN_URL, WC_TPP_PLUGIN_BASENAME
|
||||||
|
- Prevents warnings/errors during WordPress plugin activation/deactivation cycles
|
||||||
|
- Completes comprehensive protection against all redeclaration issues
|
||||||
|
- All global functions and constants now safely guarded
|
||||||
|
|
||||||
## [1.1.10] - 2025-12-22
|
## [1.1.10] - 2025-12-22
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "magdev/wc-tier-package-prices",
|
"name": "magdev/wc-tier-package-prices",
|
||||||
"description": "WooCommerce plugin for tier pricing and package prices with Twig templates",
|
"description": "WooCommerce plugin for tier pricing and package prices with Twig templates",
|
||||||
"version": "1.1.10",
|
"version": "1.1.15",
|
||||||
"type": "wordpress-plugin",
|
"type": "wordpress-plugin",
|
||||||
"license": "GPL-2.0-or-later",
|
"license": "GPL-2.0-or-later",
|
||||||
"authors": [
|
"authors": [
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ if (!defined('ABSPATH')) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
class WC_TPP_Admin {
|
if (!class_exists('WC_TPP_Admin')) {
|
||||||
|
class WC_TPP_Admin {
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
add_filter('woocommerce_get_settings_pages', array($this, 'add_settings_page'));
|
add_filter('woocommerce_get_settings_pages', array($this, 'add_settings_page'));
|
||||||
@@ -29,3 +30,6 @@ class WC_TPP_Admin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new WC_TPP_Admin();
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ if (!defined('ABSPATH')) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
class WC_TPP_Cart {
|
if (!class_exists('WC_TPP_Cart')) {
|
||||||
|
class WC_TPP_Cart {
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
add_action('woocommerce_before_calculate_totals', array($this, 'apply_tier_package_pricing'), 10, 1);
|
add_action('woocommerce_before_calculate_totals', array($this, 'apply_tier_package_pricing'), 10, 1);
|
||||||
@@ -247,3 +248,6 @@ class WC_TPP_Cart {
|
|||||||
return $editable;
|
return $editable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new WC_TPP_Cart();
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ if (!defined('ABSPATH')) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
class WC_TPP_Frontend {
|
if (!class_exists('WC_TPP_Frontend')) {
|
||||||
|
class WC_TPP_Frontend {
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
|
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
|
||||||
@@ -182,3 +183,6 @@ class WC_TPP_Frontend {
|
|||||||
return $new_html;
|
return $new_html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new WC_TPP_Frontend();
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ if (!defined('ABSPATH')) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
class WC_TPP_Product_Meta {
|
if (!class_exists('WC_TPP_Product_Meta')) {
|
||||||
|
class WC_TPP_Product_Meta {
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
add_action('woocommerce_product_options_pricing', array($this, 'add_tier_pricing_fields'));
|
add_action('woocommerce_product_options_pricing', array($this, 'add_tier_pricing_fields'));
|
||||||
@@ -167,3 +168,6 @@ class WC_TPP_Product_Meta {
|
|||||||
update_post_meta($post_id, '_wc_tpp_restrict_to_packages', $restrict_to_packages);
|
update_post_meta($post_id, '_wc_tpp_restrict_to_packages', $restrict_to_packages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new WC_TPP_Product_Meta();
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ if (!class_exists('WC_Settings_Page')) {
|
|||||||
/**
|
/**
|
||||||
* WC_TPP_Settings class
|
* WC_TPP_Settings class
|
||||||
*/
|
*/
|
||||||
class WC_TPP_Settings extends WC_Settings_Page {
|
if (!class_exists('WC_TPP_Settings')) {
|
||||||
|
class WC_TPP_Settings extends WC_Settings_Page {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@@ -139,5 +140,6 @@ class WC_TPP_Settings extends WC_Settings_Page {
|
|||||||
WC_Admin_Settings::save_fields($settings);
|
WC_Admin_Settings::save_fields($settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new WC_TPP_Settings();
|
return new WC_TPP_Settings();
|
||||||
|
|||||||
BIN
releases/wc-tier-and-package-prices-1.1.11.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.11.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.11.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.11.zip.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
4a0c0b07b29d4b7046f9d3ff3f091321 releases/wc-tier-and-package-prices-1.1.11.zip
|
||||||
1
releases/wc-tier-and-package-prices-1.1.11.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.11.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
3da9423d136a2ff254b61577ba1f84d4c0f0d1e57bae361ac29c90327feeeceb releases/wc-tier-and-package-prices-1.1.11.zip
|
||||||
BIN
releases/wc-tier-and-package-prices-1.1.12.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.12.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.12.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.12.zip.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
c1c0b5880636686227246be2c37dc42a releases/wc-tier-and-package-prices-1.1.12.zip
|
||||||
1
releases/wc-tier-and-package-prices-1.1.12.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.12.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
05b32356d46803dbb7fa17c13a2d8da96f77126746e2895e2f5c6dd0e7b490ff releases/wc-tier-and-package-prices-1.1.12.zip
|
||||||
BIN
releases/wc-tier-and-package-prices-1.1.13.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.13.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.13.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.13.zip.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
8572eed399554905fbf331d18f0677a0 wc-tier-and-package-prices-1.1.13.zip
|
||||||
1
releases/wc-tier-and-package-prices-1.1.13.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.13.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
83e29b2e40dd43e77bd83cd03d4ccc54ef53555b55544eba4d38161101f79f20 wc-tier-and-package-prices-1.1.13.zip
|
||||||
BIN
releases/wc-tier-and-package-prices-1.1.14.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.14.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.14.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.14.zip.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
e0cc51d1493ed35ab254220d9f46997b wc-tier-and-package-prices-1.1.14.zip
|
||||||
1
releases/wc-tier-and-package-prices-1.1.14.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.14.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
8a2ce7438ee49baffdcaaf323b6426d73dd1cf704bea94a80fcce27a42c097ad wc-tier-and-package-prices-1.1.14.zip
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
* Plugin Name: WooCommerce Tier and Package Prices
|
* Plugin Name: WooCommerce Tier and Package Prices
|
||||||
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-tier-package-prices
|
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-tier-package-prices
|
||||||
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
|
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
|
||||||
* Version: 1.1.10
|
* Version: 1.1.15
|
||||||
* Author: Marco Graetsch
|
* Author: Marco Graetsch
|
||||||
* Author URI: https://src.bundespruefstelle.ch/magdev
|
* Author URI: https://src.bundespruefstelle.ch/magdev
|
||||||
* Text Domain: wc-tier-package-prices
|
* Text Domain: wc-tier-package-prices
|
||||||
@@ -22,10 +22,18 @@ if (!defined('ABSPATH')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Define plugin constants
|
// Define plugin constants
|
||||||
define('WC_TPP_VERSION', '1.1.10');
|
if (!defined('WC_TPP_VERSION')) {
|
||||||
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
define('WC_TPP_VERSION', '1.1.15');
|
||||||
define('WC_TPP_PLUGIN_URL', plugin_dir_url(__FILE__));
|
}
|
||||||
define('WC_TPP_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
if (!defined('WC_TPP_PLUGIN_DIR')) {
|
||||||
|
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
||||||
|
}
|
||||||
|
if (!defined('WC_TPP_PLUGIN_URL')) {
|
||||||
|
define('WC_TPP_PLUGIN_URL', plugin_dir_url(__FILE__));
|
||||||
|
}
|
||||||
|
if (!defined('WC_TPP_PLUGIN_BASENAME')) {
|
||||||
|
define('WC_TPP_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
||||||
|
}
|
||||||
|
|
||||||
// Load Composer autoloader
|
// Load Composer autoloader
|
||||||
require_once WC_TPP_PLUGIN_DIR . 'vendor/autoload.php';
|
require_once WC_TPP_PLUGIN_DIR . 'vendor/autoload.php';
|
||||||
@@ -54,7 +62,8 @@ if (!in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get
|
|||||||
/**
|
/**
|
||||||
* Main plugin class
|
* Main plugin class
|
||||||
*/
|
*/
|
||||||
class WC_Tier_Package_Prices {
|
if (!class_exists('WC_Tier_Package_Prices')) {
|
||||||
|
class WC_Tier_Package_Prices {
|
||||||
|
|
||||||
private static $instance = null;
|
private static $instance = null;
|
||||||
|
|
||||||
@@ -83,16 +92,6 @@ class WC_Tier_Package_Prices {
|
|||||||
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-product-meta.php';
|
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-product-meta.php';
|
||||||
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-frontend.php';
|
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-frontend.php';
|
||||||
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-cart.php';
|
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-cart.php';
|
||||||
|
|
||||||
// Instantiate classes after WooCommerce is loaded
|
|
||||||
add_action('woocommerce_loaded', array($this, 'init_classes'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function init_classes() {
|
|
||||||
new WC_TPP_Admin();
|
|
||||||
new WC_TPP_Product_Meta();
|
|
||||||
new WC_TPP_Frontend();
|
|
||||||
new WC_TPP_Cart();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function declare_hpos_compatibility() {
|
public function declare_hpos_compatibility() {
|
||||||
@@ -116,6 +115,7 @@ class WC_Tier_Package_Prices {
|
|||||||
public function deactivate() {
|
public function deactivate() {
|
||||||
flush_rewrite_rules();
|
flush_rewrite_rules();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the plugin
|
// Initialize the plugin
|
||||||
|
|||||||
Reference in New Issue
Block a user