Files
wc-composable-product/wc-composable-product.php
magdev e9df6e4278 Implement comprehensive stock management integration (v1.1.0)
Added complete inventory tracking system for composable products:
- Stock validation during product selection and add-to-cart
- Automatic stock deduction on order completion/processing
- Automatic stock restoration on order cancellation/refund
- Stock status indicators with visual feedback (In stock, Low stock, Out of stock)
- Prevention of out-of-stock item selection
- Low stock warnings when 5 or fewer items remain
- Order notes documenting all stock changes

New files:
- includes/Stock_Manager.php: Core stock management logic

Modified files:
- includes/Cart_Handler.php: Integrated stock validation
- includes/Product_Selector.php: Added stock info to product data
- includes/Plugin.php: Added Stock_Manager to includes
- templates/product-selector.twig: Stock status display
- assets/css/frontend.css: Stock indicator styling
- languages/*.pot/*.po: 8 new translatable strings

Version bumped to 1.1.0 with updated CHANGELOG.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 16:41:53 +01:00

81 lines
2.5 KiB
PHP

<?php
/**
* 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.0
* Author: Marco Graetsch
* Author URI: https://example.com
* License: GPL v3 or later
* License URI: https://www.gnu.org/licenses/gpl-3.0.html
* Text Domain: wc-composable-product
* Domain Path: /languages
* Requires at least: 6.0
* Requires PHP: 8.3
* WC requires at least: 8.0
* WC tested up to: 10.0
*/
defined('ABSPATH') || exit;
// Define plugin constants
define('WC_COMPOSABLE_PRODUCT_VERSION', '1.1.0');
define('WC_COMPOSABLE_PRODUCT_FILE', __FILE__);
define('WC_COMPOSABLE_PRODUCT_PATH', plugin_dir_path(__FILE__));
define('WC_COMPOSABLE_PRODUCT_URL', plugin_dir_url(__FILE__));
define('WC_COMPOSABLE_PRODUCT_BASENAME', plugin_basename(__FILE__));
// Load Composer autoloader
if (file_exists(WC_COMPOSABLE_PRODUCT_PATH . 'vendor/autoload.php')) {
require_once WC_COMPOSABLE_PRODUCT_PATH . 'vendor/autoload.php';
}
/**
* Check if WooCommerce is active
*/
function wc_composable_product_check_woocommerce() {
if (!class_exists('WooCommerce')) {
add_action('admin_notices', function() {
?>
<div class="notice notice-error">
<p><?php esc_html_e('WooCommerce Composable Products requires WooCommerce to be installed and active.', 'wc-composable-product'); ?></p>
</div>
<?php
});
return false;
}
return true;
}
/**
* Initialize the plugin
*/
function wc_composable_product_init() {
if (!wc_composable_product_check_woocommerce()) {
return;
}
// Load text domain
load_plugin_textdomain('wc-composable-product', false, dirname(WC_COMPOSABLE_PRODUCT_BASENAME) . '/languages');
// Initialize main plugin class
WC_Composable_Product\Plugin::instance();
}
// Use woocommerce_loaded to ensure WooCommerce classes are available
add_action('woocommerce_loaded', 'wc_composable_product_init');
/**
* Activation hook
*/
function wc_composable_product_activate() {
if (!class_exists('WooCommerce')) {
deactivate_plugins(WC_COMPOSABLE_PRODUCT_BASENAME);
wp_die(
esc_html__('This plugin requires WooCommerce to be installed and active.', 'wc-composable-product'),
esc_html__('Plugin Activation Error', 'wc-composable-product'),
array('back_link' => true)
);
}
}
register_activation_hook(__FILE__, 'wc_composable_product_activate');