Automattic\WooCommerce\Blocks\Shipping

ShippingController::remove_shipping_if_no_address()publicWC 1.0

Remove shipping (i.e. delivery, not local pickup) if "Hide shipping costs until an address is entered" is enabled, and no address has been entered yet.

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

Хуков нет.

Возвращает

Массив.

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

$ShippingController = new ShippingController();
$ShippingController->remove_shipping_if_no_address( $packages );
$packages(массив) (обязательный)
Array of shipping packages.

Код ShippingController::remove_shipping_if_no_address() WC 9.8.5

public function remove_shipping_if_no_address( $packages ) {
	if ( 'shortcode' === WC()->cart->cart_context ) {
		return $packages;
	}

	$shipping_cost_requires_address = wc_string_to_bool( get_option( 'woocommerce_shipping_cost_requires_address', 'no' ) );

	// Return early here for a small performance gain if we don't need to hide shipping costs until an address is entered.
	if ( ! $shipping_cost_requires_address ) {
		return $packages;
	}

	$customer = WC()->customer;

	if ( $customer instanceof WC_Customer && $customer->has_full_shipping_address() ) {
		return $packages;
	}

	return array_map(
		function ( $package ) {
			// Package rates is always an array due to a check in core.
			$package['rates'] = array_filter(
				$package['rates'],
				function ( $rate ) {
					return $rate instanceof WC_Shipping_Rate && in_array( $rate->get_method_id(), LocalPickupUtils::get_local_pickup_method_ids(), true );
				}
			);
			return $package;
		},
		$packages
	);
}