Abstract_WC_Order_Data_Store_CPT::get_refunded_item_meta_totalprotectedWC 10.7.0

Get the summed refund item meta value for a given order, item type, and meta keys.

Method of the class: Abstract_WC_Order_Data_Store_CPT{}

No Hooks.

Returns

float. Absolute total.

Usage

// protected - for code of main (parent) or child class
$result = $this->get_refunded_item_meta_total( $order, $item_type, $meta_keys ): float;
$order(WC_Order) (required)
Order object.
$item_type(string) (required)
Order item type (e.g. 'tax', 'shipping').
$meta_keys(array) (required)
Meta keys to sum.

Changelog

Since 10.7.0 Introduced.

Abstract_WC_Order_Data_Store_CPT::get_refunded_item_meta_total() code WC 10.7.0

protected function get_refunded_item_meta_total( $order, string $item_type, array $meta_keys ): float {
	global $wpdb;

	$refund_join      = $this->get_refund_orders_join_clause( $order->get_id() );
	$meta_placeholder = implode( ', ', array_fill( 0, count( $meta_keys ), '%s' ) );

	$total = $wpdb->get_var(
		// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $refund_join is already prepared.
		// phpcs:disable WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- $meta_keys is splatted.
		$wpdb->prepare(
			"SELECT SUM( order_itemmeta.meta_value )
			FROM %i AS order_itemmeta
			INNER JOIN $refund_join
			INNER JOIN %i AS order_items ON ( order_items.order_id = refunds.id AND order_items.order_item_type = %s )
			WHERE order_itemmeta.order_item_id = order_items.order_item_id
			AND order_itemmeta.meta_key IN ( $meta_placeholder )",
			$wpdb->prefix . 'woocommerce_order_itemmeta',
			$wpdb->prefix . 'woocommerce_order_items',
			$item_type,
			...$meta_keys,
		)
		// phpcs:enable
	) ?? 0;

	return abs( $total );
}