customer-review-order.php
<?php
/**
* Customer Review Order page.
*
* Theme-overridable. Copy to `yourtheme/woocommerce/order/customer-review-order.php`.
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 10.8.0
*
* @var WC_Order $order Order being reviewed.
*/
defined( 'ABSPATH' ) || exit;
if ( ! $order instanceof WC_Order ) {
return;
}
$meta_parts = \Automattic\WooCommerce\Internal\OrderReviews\Meta::parts_for_order( $order );
/**
* Filter the eligible items rendered on the Review Order page.
*
* Defaults to the order's line items. Extensions can use this to hide items
* that have already been reviewed or are otherwise ineligible.
*
* @since 10.8.0
*
* @param WC_Order_Item[] $items Order line items.
* @param WC_Order $order The order being reviewed.
*/
$items = (array) apply_filters( 'woocommerce_review_order_eligible_items', $order->get_items(), $order );
// Batched lookup; without this each decide() call would issue its own query.
\Automattic\WooCommerce\Internal\OrderReviews\ItemEligibility::preload_for_items( $items, $order );
// Skipped rows are counted so the disabled-products notice can render above the form.
$decisions = array();
$has_unreviewed_row = false;
$skipped_count = 0;
foreach ( $items as $item ) {
if ( ! $item instanceof WC_Order_Item_Product ) {
continue;
}
$product = $item->get_product();
if ( ! $product instanceof WC_Product ) {
continue;
}
$decision = \Automattic\WooCommerce\Internal\OrderReviews\ItemEligibility::decide( $item, $order );
if ( \Automattic\WooCommerce\Internal\OrderReviews\ItemEligibility::STATUS_SKIP === $decision['status'] ) {
++$skipped_count;
continue;
}
if ( ! ( $decision['comment'] instanceof WP_Comment ) ) {
$has_unreviewed_row = true;
}
$decisions[] = array(
'item' => $item,
'product' => $product,
'decision' => $decision,
);
}//end foreach
// Empty-state: no actionable rows remain.
if ( ! $has_unreviewed_row ) {
$reviewed_count = 0;
foreach ( $decisions as $entry ) {
if ( $entry['decision']['comment'] instanceof WP_Comment ) {
++$reviewed_count;
}
}
wc_get_template(
'order/customer-review-order-empty.php',
array(
'order' => $order,
'reviewed_count' => $reviewed_count,
)
);
return;
}//end if
$order_key = (string) $order->get_order_key();
$wp_button_class = wc_wp_theme_get_element_class_name( 'button' ) ? ' ' . wc_wp_theme_get_element_class_name( 'button' ) : '';
?>
<div class="woocommerce-review-order">
<p class="woocommerce-breadcrumb woocommerce-review-order__meta">
<?php echo esc_html( implode( ' ยท ', $meta_parts ) ); ?>
</p>
<h1 class="woocommerce-review-order__title">
<?php esc_html_e( 'Review your order', 'woocommerce' ); ?>
</h1>
<p class="woocommerce-review-order__intro">
<?php esc_html_e( 'Loved something? Not so much? Share a quick review for what you bought. Feel free to skip any product.', 'woocommerce' ); ?>
</p>
<p class="woocommerce-review-order__legend">
<?php esc_html_e( '* Mandatory fields', 'woocommerce' ); ?>
</p>
<?php if ( $skipped_count > 0 ) : ?>
<div
class="woocommerce-info woocommerce-review-order__notice"
role="status"
>
<div class="woocommerce-review-order__notice-body">
<p class="woocommerce-review-order__notice-title">
<?php esc_html_e( "Don't see all your products?", 'woocommerce' ); ?>
</p>
<p class="woocommerce-review-order__notice-text">
<?php esc_html_e( 'Some products may not be available for review because the store has disabled reviews for them.', 'woocommerce' ); ?>
</p>
</div>
<button
type="button"
class="woocommerce-review-order__notice-dismiss"
aria-label="<?php esc_attr_e( 'Dismiss this notice', 'woocommerce' ); ?>"
>
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<form
class="woocommerce-review-order__form"
method="post"
action="<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>"
data-ajax-url="<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>"
novalidate
>
<input type="hidden" name="action" value="<?php echo esc_attr( 'woocommerce_submit_order_reviews' ); ?>" />
<input type="hidden" name="order_id" value="<?php echo esc_attr( (string) $order->get_id() ); ?>" />
<input type="hidden" name="key" value="<?php echo esc_attr( $order_key ); ?>" />
<?php wp_nonce_field( 'woocommerce_submit_order_reviews', '_wcnonce' ); ?>
<ul class="woocommerce-review-order__items">
<?php
$row_index = 0;
foreach ( $decisions as $entry ) {
$item = $entry['item'];
$product = $entry['product'];
$decision = $entry['decision'];
$prefill = \Automattic\WooCommerce\Internal\OrderReviews\ItemEligibility::prefill_for_item( $item, $order );
wc_get_template(
'order/customer-review-order-row.php',
array(
'item' => $item,
'product' => $product,
'order' => $order,
'row_index' => $row_index,
'existing_rating' => $prefill['rating'],
'existing_text' => $prefill['text'],
)
);
++$row_index;
}
?>
</ul>
<div class="woocommerce-review-order__actions">
<button
type="submit"
class="woocommerce-review-order__submit button<?php echo esc_attr( $wp_button_class ); ?>"
>
<?php esc_html_e( 'Submit reviews', 'woocommerce' ); ?>
</button>
</div>
</form>
<div class="woocommerce-review-order__success" hidden>
<h1 class="woocommerce-review-order__empty-title">
<?php esc_html_e( 'Thank you for your reviews', 'woocommerce' ); ?>
</h1>
<p class="woocommerce-review-order__empty-body">
<?php esc_html_e( 'Your feedback helps other customers make better purchasing decisions.', 'woocommerce' ); ?>
</p>
</div>
</div>