WC_Cart_Totals::calculate_item_totals()protectedWC 3.2.0

Calculate item totals.

Метод класса: WC_Cart_Totals{}

Возвращает

null. Ничего (null).

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->calculate_item_totals();

Список изменений

С версии 3.2.0 Введена.

Код WC_Cart_Totals::calculate_item_totals() WC 8.7.0

protected function calculate_item_totals() {
	$this->get_items_from_cart();
	$this->calculate_item_subtotals();
	$this->calculate_discounts();

	foreach ( $this->items as $item_key => $item ) {
		$item->total     = $this->get_discounted_price_in_cents( $item_key );
		$item->total_tax = 0;

		if ( has_filter( 'woocommerce_get_discounted_price' ) ) {
			/**
			 * Allow plugins to filter this price like in the legacy cart class.
			 *
			 * This is legacy and should probably be deprecated in the future.
			 * $item->object is the cart item object.
			 * $this->cart is the cart object.
			 */
			$item->total = wc_add_number_precision(
				apply_filters( 'woocommerce_get_discounted_price', wc_remove_number_precision( $item->total ), $item->object, $this->cart )
			);
		}

		if ( $this->calculate_tax && $item->product->is_taxable() ) {
			$total_taxes     = apply_filters( 'woocommerce_calculate_item_totals_taxes', WC_Tax::calc_tax( $item->total, $item->tax_rates, $item->price_includes_tax ), $item, $this );
			$item->taxes     = $total_taxes;
			$item->total_tax = array_sum( array_map( array( $this, 'round_line_tax' ), $item->taxes ) );

			if ( $item->price_includes_tax ) {
				// Use unrounded taxes so we can re-calculate from the orders screen accurately later.
				$item->total = $item->total - array_sum( $item->taxes );
			}
		}

		$this->cart->cart_contents[ $item_key ]['line_tax_data']['total'] = wc_remove_number_precision_deep( $item->taxes );
		$this->cart->cart_contents[ $item_key ]['line_total']             = wc_remove_number_precision( $item->total );
		$this->cart->cart_contents[ $item_key ]['line_tax']               = wc_remove_number_precision( $item->total_tax );
	}

	$items_total = $this->get_rounded_items_total( $this->get_values_for_total( 'total' ) );

	$this->set_total( 'items_total', $items_total );
	$this->set_total( 'items_total_tax', array_sum( array_values( wp_list_pluck( $this->items, 'total_tax' ) ) ) );

	$this->cart->set_cart_contents_total( $this->get_total( 'items_total' ) );
	$this->cart->set_cart_contents_tax( array_sum( $this->get_merged_taxes( false, 'items' ) ) );
	$this->cart->set_cart_contents_taxes( $this->get_merged_taxes( false, 'items' ) );
}