Initial implementation of WooCommerce Composable Products plugin

Implemented custom WooCommerce product type allowing customers to build their own
product bundles by selecting from predefined sets of products.

Features:
- Custom "Composable Product" type with admin interface
- Product selection by category, tag, or SKU
- Configurable selection limits (global and per-product)
- Dual pricing modes: fixed price or sum of selected products
- Modern responsive frontend with Twig templates
- AJAX add-to-cart functionality
- Full internationalization support (.pot file)
- WooCommerce settings integration
- Comprehensive documentation

Technical implementation:
- PHP 8.3+ with PSR-4 autoloading
- Twig 3.0 templating engine via Composer
- Vanilla JavaScript with jQuery for frontend interactions
- WordPress and WooCommerce hooks for seamless integration
- Security: input sanitization, validation, and output escaping
- Translation-ready with text domain 'wc-composable-product'

Documentation:
- README.md: Project overview and features
- INSTALL.md: Installation and usage guide
- IMPLEMENTATION.md: Technical architecture
- CHANGELOG.md: Version history

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-31 00:38:29 +01:00
commit 1edb0be3d9
21 changed files with 2628 additions and 0 deletions

43
assets/css/admin.css Normal file
View File

@@ -0,0 +1,43 @@
/**
* Admin Styles for Composable Products
*
* @package WC_Composable_Product
*/
#composable_product_data {
padding: 12px;
}
.composable_criteria_group {
border-top: 1px solid #eee;
padding-top: 12px;
margin-top: 12px;
}
#_composable_categories,
#_composable_tags {
min-height: 150px;
}
.show_if_composable {
display: none;
}
.product-type-composable .show_if_composable {
display: block;
}
.composable_options.composable_tab a::before {
content: '\f323';
font-family: 'Dashicons';
}
/* Enhanced select styling */
.wc-composable-product-admin .select2-container {
min-width: 50%;
}
/* Help tips */
.woocommerce-help-tip {
color: #666;
}