You've already forked wc-composable-product
Refactor to PSR-4: rename files and switch namespace
- Rename files to PascalCase: Product_Type → ProductType, Cart_Handler → CartHandler, Product_Selector → ProductSelector, Stock_Manager → StockManager, Admin/Product_Data → Admin/ProductData - Switch namespace from WC_Composable_Product to Magdev\WcComposableProduct - Update all cross-references in PHP, CSS, JS, translations, and docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
77
includes/ProductSelector.php
Normal file
77
includes/ProductSelector.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* Product Selector
|
||||
*
|
||||
* @package Magdev\WcComposableProduct
|
||||
*/
|
||||
|
||||
namespace Magdev\WcComposableProduct;
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* Product Selector Class
|
||||
*
|
||||
* Handles rendering the product selection interface
|
||||
*/
|
||||
class ProductSelector {
|
||||
/**
|
||||
* Render product selector
|
||||
*
|
||||
* @param ProductType $product Composable product
|
||||
*/
|
||||
public static function render($product) {
|
||||
if (!$product || $product->get_type() !== 'composable') {
|
||||
return;
|
||||
}
|
||||
|
||||
$available_products = $product->get_available_products();
|
||||
$selection_limit = $product->get_selection_limit();
|
||||
$pricing_mode = $product->get_pricing_mode();
|
||||
|
||||
$show_images = get_option('wc_composable_show_images', 'yes') === 'yes';
|
||||
$show_prices = get_option('wc_composable_show_prices', 'yes') === 'yes';
|
||||
$show_total = get_option('wc_composable_show_total', 'yes') === 'yes';
|
||||
|
||||
// Get stock manager for stock information
|
||||
$stock_manager = new StockManager();
|
||||
|
||||
// Prepare product data for template
|
||||
$products_data = [];
|
||||
foreach ($available_products as $available_product) {
|
||||
$stock_info = $stock_manager->get_product_stock_info($available_product->get_id());
|
||||
|
||||
$products_data[] = [
|
||||
'id' => $available_product->get_id(),
|
||||
'name' => $available_product->get_name(),
|
||||
'price' => $available_product->get_price(),
|
||||
'price_html' => $available_product->get_price_html(),
|
||||
'image_url' => wp_get_attachment_image_url($available_product->get_image_id(), 'thumbnail'),
|
||||
'permalink' => $available_product->get_permalink(),
|
||||
'stock_status' => $stock_info['stock_status'],
|
||||
'in_stock' => $stock_info['in_stock'],
|
||||
'stock_quantity' => $stock_info['stock_quantity'],
|
||||
'managing_stock' => $stock_info['managing_stock'],
|
||||
'backorders_allowed' => $stock_info['backorders_allowed'],
|
||||
];
|
||||
}
|
||||
|
||||
$context = [
|
||||
'product_id' => $product->get_id(),
|
||||
'products' => $products_data,
|
||||
'selection_limit' => $selection_limit,
|
||||
'pricing_mode' => $pricing_mode,
|
||||
'show_images' => $show_images,
|
||||
'show_prices' => $show_prices,
|
||||
'show_total' => $show_total,
|
||||
'fixed_price' => $product->get_price(),
|
||||
'fixed_price_html' => wc_price($product->get_price()),
|
||||
'zero_price_html' => wc_price(0),
|
||||
'currency_symbol' => get_woocommerce_currency_symbol(),
|
||||
];
|
||||
|
||||
// Render template
|
||||
$plugin = Plugin::instance();
|
||||
echo $plugin->render_template('product-selector.twig', $context);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user