Files
wc-tier-and-package-prices/wc-tier-and-package-prices.php

122 lines
3.8 KiB
PHP
Raw Normal View History

<?php
/**
* Plugin Name: WooCommerce Tier and 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
Release version 1.1.8 - Critical activation fix Fixed critical plugin activation error that was preventing the plugin from being activated on WordPress 6.9.x and WooCommerce 10.x. The issue was introduced in v1.1.3 when admin classes were still being instantiated immediately at file include time, before WooCommerce was loaded. While v1.1.6 fixed this for Frontend and Cart classes, the Admin and Product Meta classes were missed. Critical Fix: - Removed immediate instantiation from WC_TPP_Admin class - Removed immediate instantiation from WC_TPP_Product_Meta class - Both classes now instantiated via woocommerce_loaded hook - Ensures all WooCommerce hooks are available before registration Technical Changes: - Removed "new WC_TPP_Admin();" from class-wc-tpp-admin.php - Removed "new WC_TPP_Product_Meta();" from class-wc-tpp-product-meta.php - Added both classes to init_classes() method in main plugin file - All four main classes now follow consistent initialization pattern Impact: - Plugin now activates correctly on all WordPress/WooCommerce versions - Resolves fatal errors during plugin activation - Last working version was v1.1.2, now fixed in v1.1.8 Updated Files: - includes/class-wc-tpp-admin.php (removed auto-instantiation) - includes/class-wc-tpp-product-meta.php (removed auto-instantiation) - wc-tier-and-package-prices.php (version 1.1.8, init_classes updated) - composer.json (version 1.1.8) - CHANGELOG.md (v1.1.8 section added) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 00:24:12 +01:00
* Version: 1.1.8
* Author: Marco Graetsch
* Author URI: https://src.bundespruefstelle.ch/magdev
* Text Domain: wc-tier-package-prices
* Domain Path: /languages
* Requires at least: 6.0
* Requires PHP: 7.4
* WC requires at least: 8.0
* WC tested up to: 10.0
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
}
// Define plugin constants
Release version 1.1.8 - Critical activation fix Fixed critical plugin activation error that was preventing the plugin from being activated on WordPress 6.9.x and WooCommerce 10.x. The issue was introduced in v1.1.3 when admin classes were still being instantiated immediately at file include time, before WooCommerce was loaded. While v1.1.6 fixed this for Frontend and Cart classes, the Admin and Product Meta classes were missed. Critical Fix: - Removed immediate instantiation from WC_TPP_Admin class - Removed immediate instantiation from WC_TPP_Product_Meta class - Both classes now instantiated via woocommerce_loaded hook - Ensures all WooCommerce hooks are available before registration Technical Changes: - Removed "new WC_TPP_Admin();" from class-wc-tpp-admin.php - Removed "new WC_TPP_Product_Meta();" from class-wc-tpp-product-meta.php - Added both classes to init_classes() method in main plugin file - All four main classes now follow consistent initialization pattern Impact: - Plugin now activates correctly on all WordPress/WooCommerce versions - Resolves fatal errors during plugin activation - Last working version was v1.1.2, now fixed in v1.1.8 Updated Files: - includes/class-wc-tpp-admin.php (removed auto-instantiation) - includes/class-wc-tpp-product-meta.php (removed auto-instantiation) - wc-tier-and-package-prices.php (version 1.1.8, init_classes updated) - composer.json (version 1.1.8) - CHANGELOG.md (v1.1.8 section added) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 00:24:12 +01:00
define('WC_TPP_VERSION', '1.1.8');
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('WC_TPP_PLUGIN_URL', plugin_dir_url(__FILE__));
define('WC_TPP_PLUGIN_BASENAME', plugin_basename(__FILE__));
// Load Composer autoloader
require_once WC_TPP_PLUGIN_DIR . 'vendor/autoload.php';
/**
* Check if WooCommerce is active
*/
if (!in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
add_action('admin_notices', 'wc_tpp_woocommerce_missing_notice');
return;
}
function wc_tpp_woocommerce_missing_notice() {
?>
<div class="notice notice-error">
<p><?php _e('WooCommerce Tier and Package Prices requires WooCommerce to be installed and active.', 'wc-tier-package-prices'); ?></p>
</div>
<?php
}
/**
* Main plugin class
*/
class WC_Tier_Package_Prices {
private static $instance = null;
public static function get_instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->init_hooks();
$this->includes();
}
private function init_hooks() {
add_action('plugins_loaded', array($this, 'load_textdomain'));
add_action('before_woocommerce_init', array($this, 'declare_hpos_compatibility'));
register_activation_hook(__FILE__, array($this, 'activate'));
register_deactivation_hook(__FILE__, array($this, 'deactivate'));
}
private function includes() {
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-template-loader.php';
require_once WC_TPP_PLUGIN_DIR . 'includes/class-wc-tpp-admin.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-cart.php';
Release version 1.1.6 - Critical fix for plugin activation Fixed critical bug that prevented plugin activation in v1.1.3, v1.1.4, and v1.1.5. Root Cause: - WC_TPP_Cart and WC_TPP_Frontend classes were instantiated immediately when their files were loaded (via `new ClassName();` at bottom of files) - This happened BEFORE WooCommerce was fully loaded - Hook registration attempted to access WooCommerce functions before they existed - Result: Fatal error during plugin activation Solution: - Removed immediate instantiation from class-wc-tpp-cart.php (line 251) - Removed immediate instantiation from class-wc-tpp-frontend.php (line 186) - Added init_classes() method to main plugin class - Classes now instantiated via woocommerce_loaded hook - Ensures WooCommerce is fully initialized before any hooks are registered Changes: - includes/class-wc-tpp-cart.php - Removed `new WC_TPP_Cart();` - includes/class-wc-tpp-frontend.php - Removed `new WC_TPP_Frontend();` - wc-tier-and-package-prices.php - Added init_classes() and woocommerce_loaded hook - CHANGELOG.md - Added v1.1.6 section - composer.json - Version 1.1.6 - All translation files updated to 1.1.6 - All .mo files recompiled This fix ensures proper WordPress plugin lifecycle: 1. Plugin file loaded 2. Classes defined (but not instantiated) 3. WooCommerce loads 4. woocommerce_loaded hook fires 5. Classes instantiated with full WooCommerce availability 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 19:57:27 +01:00
// Instantiate classes after WooCommerce is loaded
add_action('woocommerce_loaded', array($this, 'init_classes'));
}
public function init_classes() {
Release version 1.1.8 - Critical activation fix Fixed critical plugin activation error that was preventing the plugin from being activated on WordPress 6.9.x and WooCommerce 10.x. The issue was introduced in v1.1.3 when admin classes were still being instantiated immediately at file include time, before WooCommerce was loaded. While v1.1.6 fixed this for Frontend and Cart classes, the Admin and Product Meta classes were missed. Critical Fix: - Removed immediate instantiation from WC_TPP_Admin class - Removed immediate instantiation from WC_TPP_Product_Meta class - Both classes now instantiated via woocommerce_loaded hook - Ensures all WooCommerce hooks are available before registration Technical Changes: - Removed "new WC_TPP_Admin();" from class-wc-tpp-admin.php - Removed "new WC_TPP_Product_Meta();" from class-wc-tpp-product-meta.php - Added both classes to init_classes() method in main plugin file - All four main classes now follow consistent initialization pattern Impact: - Plugin now activates correctly on all WordPress/WooCommerce versions - Resolves fatal errors during plugin activation - Last working version was v1.1.2, now fixed in v1.1.8 Updated Files: - includes/class-wc-tpp-admin.php (removed auto-instantiation) - includes/class-wc-tpp-product-meta.php (removed auto-instantiation) - wc-tier-and-package-prices.php (version 1.1.8, init_classes updated) - composer.json (version 1.1.8) - CHANGELOG.md (v1.1.8 section added) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 00:24:12 +01:00
new WC_TPP_Admin();
new WC_TPP_Product_Meta();
Release version 1.1.6 - Critical fix for plugin activation Fixed critical bug that prevented plugin activation in v1.1.3, v1.1.4, and v1.1.5. Root Cause: - WC_TPP_Cart and WC_TPP_Frontend classes were instantiated immediately when their files were loaded (via `new ClassName();` at bottom of files) - This happened BEFORE WooCommerce was fully loaded - Hook registration attempted to access WooCommerce functions before they existed - Result: Fatal error during plugin activation Solution: - Removed immediate instantiation from class-wc-tpp-cart.php (line 251) - Removed immediate instantiation from class-wc-tpp-frontend.php (line 186) - Added init_classes() method to main plugin class - Classes now instantiated via woocommerce_loaded hook - Ensures WooCommerce is fully initialized before any hooks are registered Changes: - includes/class-wc-tpp-cart.php - Removed `new WC_TPP_Cart();` - includes/class-wc-tpp-frontend.php - Removed `new WC_TPP_Frontend();` - wc-tier-and-package-prices.php - Added init_classes() and woocommerce_loaded hook - CHANGELOG.md - Added v1.1.6 section - composer.json - Version 1.1.6 - All translation files updated to 1.1.6 - All .mo files recompiled This fix ensures proper WordPress plugin lifecycle: 1. Plugin file loaded 2. Classes defined (but not instantiated) 3. WooCommerce loads 4. woocommerce_loaded hook fires 5. Classes instantiated with full WooCommerce availability 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 19:57:27 +01:00
new WC_TPP_Frontend();
new WC_TPP_Cart();
}
public function declare_hpos_compatibility() {
if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', __FILE__, true);
}
}
public function load_textdomain() {
load_plugin_textdomain('wc-tier-package-prices', false, dirname(WC_TPP_PLUGIN_BASENAME) . '/languages');
}
public function activate() {
// Add default options
add_option('wc_tpp_enable_tier_pricing', 'yes');
add_option('wc_tpp_enable_package_pricing', 'yes');
add_option('wc_tpp_display_table', 'yes');
flush_rewrite_rules();
}
public function deactivate() {
flush_rewrite_rules();
}
}
// Initialize the plugin
function wc_tpp_init() {
return WC_Tier_Package_Prices::get_instance();
}
add_action('plugins_loaded', 'wc_tpp_init', 11);