115 lines
4.9 KiB
PHP
115 lines
4.9 KiB
PHP
<?php
|
|
/**
|
|
* Customer Review Order — per-item form row.
|
|
*
|
|
* Theme-overridable. Copy to `yourtheme/woocommerce/order/customer-review-order-row.php`.
|
|
*
|
|
* @see https://woocommerce.com/document/template-structure/
|
|
* @package WooCommerce\Templates
|
|
* @version 10.8.0
|
|
*
|
|
* @var WC_Order_Item_Product $item Order line item being rendered.
|
|
* @var WC_Product $product Product attached to the line item.
|
|
* @var WC_Order $order Order being reviewed.
|
|
* @var int $row_index Zero-based row index, used in input names.
|
|
* @var int $existing_rating Pre-fill rating (0 when no prior review for this order).
|
|
* @var string $existing_text Pre-fill review text (empty when no prior review for this order).
|
|
*/
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
if ( ! $item instanceof WC_Order_Item_Product || ! $product instanceof WC_Product || ! $order instanceof WC_Order ) {
|
|
return;
|
|
}
|
|
|
|
$existing_rating = isset( $existing_rating ) ? (int) $existing_rating : 0;
|
|
$existing_text = isset( $existing_text ) ? (string) $existing_text : '';
|
|
|
|
$item_id = $item->get_id();
|
|
$product_id = $product->get_id();
|
|
$product_link = $product->is_visible() ? get_permalink( $product_id ) : '';
|
|
$product_name = $item->get_name();
|
|
$image_html = $product->get_image( 'woocommerce_thumbnail' );
|
|
$rating_label_id = 'woocommerce-review-rating-label-' . $item_id;
|
|
$review_label_id = 'woocommerce-review-text-label-' . $item_id;
|
|
$review_input_id = 'woocommerce-review-text-' . $item_id;
|
|
|
|
$rating_control = \Automattic\WooCommerce\Internal\OrderReviews\StarRating::render(
|
|
array(
|
|
'name' => 'reviews[' . $row_index . '][rating]',
|
|
'id_prefix' => 'woocommerce-review-rating-' . $item_id,
|
|
'label_id' => $rating_label_id,
|
|
'selected' => $existing_rating,
|
|
)
|
|
);
|
|
?>
|
|
<li
|
|
class="woocommerce-review-order__item"
|
|
data-row-index="<?php echo esc_attr( (string) $row_index ); ?>"
|
|
data-initial-rating="<?php echo esc_attr( (string) $existing_rating ); ?>"
|
|
data-initial-text="<?php echo esc_attr( $existing_text ); ?>"
|
|
>
|
|
<p class="woocommerce-review-order__item-title">
|
|
<?php if ( $product_link ) : ?>
|
|
<a href="<?php echo esc_url( $product_link ); ?>" target="_blank" rel="noopener noreferrer">
|
|
<?php echo esc_html( $product_name ); ?>
|
|
<span class="screen-reader-text"><?php esc_html_e( '(opens in a new tab)', 'woocommerce' ); ?></span>
|
|
</a>
|
|
<?php else : ?>
|
|
<?php echo esc_html( $product_name ); ?>
|
|
<?php endif; ?>
|
|
</p>
|
|
|
|
<div class="woocommerce-review-order__item-row">
|
|
<div class="woocommerce-review-order__item-image">
|
|
<?php echo $image_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- get_image() returns escaped HTML. ?>
|
|
</div>
|
|
|
|
<div class="woocommerce-review-order__item-rating">
|
|
<input type="hidden" name="reviews[<?php echo esc_attr( (string) $row_index ); ?>][product_id]" value="<?php echo esc_attr( (string) $product_id ); ?>" />
|
|
<input type="hidden" name="reviews[<?php echo esc_attr( (string) $row_index ); ?>][order_item_id]" value="<?php echo esc_attr( (string) $item_id ); ?>" />
|
|
|
|
<p id="<?php echo esc_attr( $rating_label_id ); ?>" class="woocommerce-review-order__item-rating-label">
|
|
<?php
|
|
printf(
|
|
'%1$s <span class="required" aria-hidden="true">*</span><span class="screen-reader-text"> %2$s</span>',
|
|
esc_html__( 'Your rating', 'woocommerce' ),
|
|
esc_html__( 'Required', 'woocommerce' )
|
|
);
|
|
?>
|
|
</p>
|
|
<?php echo $rating_control; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- StarRating::render() returns escaped HTML. ?>
|
|
</div>
|
|
|
|
<div class="woocommerce-review-order__item-review">
|
|
<label id="<?php echo esc_attr( $review_label_id ); ?>" for="<?php echo esc_attr( $review_input_id ); ?>" class="woocommerce-review-order__item-review-label">
|
|
<?php esc_html_e( 'Your review', 'woocommerce' ); ?>
|
|
</label>
|
|
<textarea
|
|
id="<?php echo esc_attr( $review_input_id ); ?>"
|
|
class="woocommerce-review-order__item-review-textarea"
|
|
name="reviews[<?php echo esc_attr( (string) $row_index ); ?>][text]"
|
|
rows="3"
|
|
placeholder="<?php esc_attr_e( 'Share your experience with this product...', 'woocommerce' ); ?>"
|
|
><?php echo esc_textarea( $existing_text ); ?></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
/**
|
|
* Fires after the rating + textarea inside a Review Order form row, as a
|
|
* sibling of the row's columns so injected fields render below them.
|
|
*
|
|
* Echo HTML directly; the surrounding container expects no return value.
|
|
*
|
|
* @since 10.8.0
|
|
*
|
|
* @param WC_Order_Item_Product $item The line item being reviewed.
|
|
* @param WC_Product $product The associated product.
|
|
* @param WC_Order $order The order.
|
|
* @param int $row_index Zero-based row index for input names.
|
|
*/
|
|
do_action( 'woocommerce_review_order_form_fields', $item, $product, $order, $row_index );
|
|
?>
|
|
</li>
|