You've already forked wc-bootstrap
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>
62 lines
2.2 KiB
Twig
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 %}
|
|
× <del>{{ qty }}</del> <ins>{{ qty - (refunded_qty * -1) }}</ins>
|
|
{% else %}
|
|
× {{ 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 %}
|