{# # Grouped Product Add to Cart (Bootstrap 5 Override) # # Add-to-cart form for grouped products: table of child products with quantities. # # Expected context: # product - WC_Product_Grouped object (global, injected by TemplateOverride) # grouped_products - Array of child WC_Product objects # # Note: quantites_required and show_add_to_cart_button are computed inside the # loop (matching WooCommerce's PHP template behavior), not passed as context. # # WooCommerce PHP equivalent: single-product/add-to-cart/grouped.php # # @package WcBootstrap # @since 0.1.0 #} {{ do_action('woocommerce_before_add_to_cart_form') }}
{% set quantites_required = false %} {% set show_add_to_cart_button = false %} {{ do_action('woocommerce_grouped_product_list_before') }} {% for grouped_product in grouped_products %} {% set child_id = grouped_product.get_id() %} {# Set up global product data for each child (matches PHP's setup_postdata). #} {{ wc_setup_product_data(grouped_product) }} {% if grouped_product.is_purchasable() and not grouped_product.has_options() %} {% set quantites_required = true %} {% endif %} {% if grouped_product.is_in_stock() %} {% set show_add_to_cart_button = true %} {% endif %} {% endfor %} {{ wp_reset_postdata() }} {{ do_action('woocommerce_grouped_product_list_after') }}
{% if not grouped_product.is_purchasable() or grouped_product.has_options() or not grouped_product.is_in_stock() %} {# Non-purchasable, has options (variable), or out-of-stock: show view link #} {% if grouped_product.is_visible() %} {{ __('View product') }} {% endif %} {% elseif grouped_product.is_sold_individually() %}
{% else %} {% include 'global/quantity-input.html.twig' with { input_id: 'quantity_' ~ child_id, input_name: 'quantity[' ~ child_id ~ ']', input_value: '', min_value: 0, max_value: grouped_product.get_max_purchase_quantity(), step: 1, placeholder: '0', inputmode: 'numeric', classes: 'qty', readonly: false, type: 'number', args: { product_name: grouped_product.get_name() } } %} {% endif %}
{{ grouped_product.get_price_html()|raw }}
{% if quantites_required and show_add_to_cart_button %} {{ do_action('woocommerce_before_add_to_cart_button') }} {{ do_action('woocommerce_after_add_to_cart_button') }} {% endif %}
{{ do_action('woocommerce_after_add_to_cart_form') }}