Files
wc-bootstrap/templates/order/order-details-item.html.twig
magdev 46eb7f0a22 Add WooCommerce-to-Twig rendering bridge
Intercept WooCommerce's PHP template loading via
woocommerce_before_template_part / woocommerce_after_template_part hooks
to render Bootstrap 5 Twig templates instead. This makes all 99 child
theme templates functional in a standard WooCommerce environment.

- Create WooCommerceExtension (Twig AbstractExtension) with ~50 functions
  and 7 filters covering WC API, WordPress hooks, escaping, and forms
- Rewrite TemplateOverride to use hook-based interception with stack-based
  output buffering for nested template support
- Wire bridge initialization at init priority 20 in functions.php
- Fix invalid {% do return() %} in two order templates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:15:59 +01:00

62 lines
2.2 KiB
Twig

{#
# Order Details Item (Bootstrap 5 Override)
#
# Renders a single line item row within the order details table.
# HPOS compatible: uses WC_Order methods only.
#
# Expected context:
# order - WC_Order object
# item_id - Item ID
# item - WC_Order_Item_Product object
# show_purchase_note - Whether to show purchase note
# purchase_note - Purchase note text
# product - WC_Product object or null
#
# WooCommerce PHP equivalent: order/order-details-item.php
#
# @package WcBootstrap
# @since 0.1.0
#}
{% if apply_filters('woocommerce_order_item_visible', true, item) %}
{% set is_visible = product and product.is_visible() %}
{% set product_permalink = apply_filters('woocommerce_order_item_permalink', is_visible ? product.get_permalink(item) : '', item, order) %}
<tr class="{{ apply_filters('woocommerce_order_item_class', 'woocommerce-table__line-item order_item', item, order) }}">
<td class="product-name">
{% if product_permalink %}
<a href="{{ product_permalink|esc_url }}">{{ item.get_name()|esc_html }}</a>
{% else %}
{{ item.get_name()|esc_html }}
{% endif %}
{% set qty = item.get_quantity() %}
{% set refunded_qty = order.get_qty_refunded_for_item(item_id) %}
<strong class="product-quantity">
{% if refunded_qty %}
&times;&nbsp;<del>{{ qty }}</del> <ins>{{ qty - (refunded_qty * -1) }}</ins>
{% else %}
&times;&nbsp;{{ qty }}
{% endif %}
</strong>
{{ do_action('woocommerce_order_item_meta_start', item_id, item, order, false) }}
{{ wc_display_item_meta(item) }}
{{ do_action('woocommerce_order_item_meta_end', item_id, item, order, false) }}
</td>
<td class="product-total text-end">
{{ order.get_formatted_line_subtotal(item)|raw }}
</td>
</tr>
{% if show_purchase_note and purchase_note %}
<tr class="product-purchase-note">
<td colspan="2">
{{ purchase_note|wp_kses_post|wpautop }}
</td>
</tr>
{% endif %}
{% endif %}