You've already forked wc-bootstrap
Audit and fix 14 Twig templates for escaping bugs, CSS conflicts, and missing Bootstrap styling: - Fix nl2br/esc_html filter order in order details - Add WC gallery modifier classes for zoom/photoswipe JS init - Fix HTML entity double-encoding in headings (up-sells, cross-sells, related) - Remove wrong 'is defined' guards on function calls - Remove duplicate deprecated hooks in dashboard - Add |raw to brand description HTML filter chain - Add role="alert" for accessibility, |esc_attr on notification types - Style mini-cart remove button as Bootstrap btn - Make shipping form-check class conditional - Add shop_table CSS reset and gallery opacity fallback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
90 lines
3.4 KiB
Twig
90 lines
3.4 KiB
Twig
{#
|
|
# Order Details (Bootstrap 5 Override)
|
|
#
|
|
# Renders the full order details table with items, totals, and customer info.
|
|
# HPOS compatible: uses WC_Order methods only.
|
|
#
|
|
# Expected context:
|
|
# order_id - Order ID
|
|
# show_downloads - Whether to show downloads table
|
|
#
|
|
# WooCommerce PHP equivalent: order/order-details.php
|
|
#
|
|
# @package WcBootstrap
|
|
# @since 0.1.0
|
|
#}
|
|
|
|
{% set order = wc_get_order(order_id) %}
|
|
|
|
{% if order %}
|
|
{% set order_items = order.get_items(apply_filters('woocommerce_purchase_order_item_types', 'line_item')) %}
|
|
{% set show_purchase_note = order.has_status(apply_filters('woocommerce_purchase_note_order_statuses', ['completed', 'processing'])) %}
|
|
{% set show_customer_details = order.get_user_id() == get_current_user_id() %}
|
|
|
|
{% if show_downloads is defined and show_downloads %}
|
|
{% set downloads = order.get_downloadable_items() %}
|
|
{% if downloads is not empty %}
|
|
{{ wc_get_template('order/order-downloads.php', { downloads: downloads, show_title: true }) }}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
<section class="woocommerce-order-details">
|
|
{{ do_action('woocommerce_order_details_before_order_table', order) }}
|
|
|
|
<h2 class="h5 mb-3">{{ __('Order details') }}</h2>
|
|
|
|
<div class="table-responsive">
|
|
<table class="table table-hover align-middle mb-0">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th>{{ __('Product') }}</th>
|
|
<th class="text-end">{{ __('Total') }}</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
{{ do_action('woocommerce_order_details_before_order_table_items', order) }}
|
|
|
|
{% for item_id, item in order_items %}
|
|
{% set product = item.get_product() %}
|
|
{% include 'order/order-details-item.html.twig' with {
|
|
order: order,
|
|
item_id: item_id,
|
|
item: item,
|
|
show_purchase_note: show_purchase_note,
|
|
purchase_note: product ? product.get_purchase_note() : '',
|
|
product: product
|
|
} %}
|
|
{% endfor %}
|
|
|
|
{{ do_action('woocommerce_order_details_after_order_table_items', order) }}
|
|
</tbody>
|
|
|
|
<tfoot>
|
|
{% for key, total in order.get_order_item_totals() %}
|
|
<tr>
|
|
<th scope="row">{{ total.label|esc_html }}</th>
|
|
<td class="text-end">{{ total.value|wp_kses_post }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
|
|
{% if order.get_customer_note() %}
|
|
<tr>
|
|
<th>{{ __('Note:') }}</th>
|
|
<td class="text-end">{{ order.get_customer_note()|esc_html|nl2br }}</td>
|
|
</tr>
|
|
{% endif %}
|
|
</tfoot>
|
|
</table>
|
|
</div>
|
|
|
|
{{ do_action('woocommerce_order_details_after_order_table', order) }}
|
|
</section>
|
|
|
|
{{ do_action('woocommerce_after_order_details', order) }}
|
|
|
|
{% if show_customer_details %}
|
|
{% include 'order/order-details-customer.html.twig' with { order: order } %}
|
|
{% endif %}
|
|
{% endif %}
|