Automattic\WooCommerce\StoreApi\Schemas\V1

ShippingAddressSchema::get_item_response()publicWC 1.0

Convert a term object into an object suitable for the response.

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

Хуков нет.

Возвращает

Массив.

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

$ShippingAddressSchema = new ShippingAddressSchema();
$ShippingAddressSchema->get_item_response( $address );
$address(\WC_Order|\WC_Customer) (обязательный)
An object with shipping address.

Код ShippingAddressSchema::get_item_response() WC 8.7.0

public function get_item_response( $address ) {
	$validation_util = new ValidationUtils();
	if ( ( $address instanceof \WC_Customer || $address instanceof \WC_Order ) ) {
		$shipping_country = $address->get_shipping_country();
		$shipping_state   = $address->get_shipping_state();

		if ( ! $validation_util->validate_state( $shipping_state, $shipping_country ) ) {
			$shipping_state = '';
		}

		if ( $address instanceof \WC_Order ) {
			// get additional fields from order.
			$additional_address_fields = $this->additional_fields_controller->get_all_fields_from_order( $address );
		} elseif ( $address instanceof \WC_Customer ) {
			// get additional fields from customer.
			$additional_address_fields = $this->additional_fields_controller->get_all_fields_from_customer( $address );
		}

		$additional_address_fields = array_reduce(
			array_keys( $additional_address_fields ),
			function( $carry, $key ) use ( $additional_address_fields ) {
				if ( 0 === strpos( $key, '/shipping/' ) ) {
					$value         = $additional_address_fields[ $key ];
					$key           = str_replace( '/shipping/', '', $key );
					$carry[ $key ] = $value;
				}
				return $carry;
			},
			[]
		);
		$address_object            = array_merge(
			[
				'first_name' => $address->get_shipping_first_name(),
				'last_name'  => $address->get_shipping_last_name(),
				'company'    => $address->get_shipping_company(),
				'address_1'  => $address->get_shipping_address_1(),
				'address_2'  => $address->get_shipping_address_2(),
				'city'       => $address->get_shipping_city(),
				'state'      => $shipping_state,
				'postcode'   => $address->get_shipping_postcode(),
				'country'    => $shipping_country,
				'phone'      => $address->get_shipping_phone(),
			],
			$additional_address_fields
		);

		// Add any missing keys from additional_fields_controller to the address response.
		foreach ( $this->additional_fields_controller->get_address_fields_keys() as $field ) {
			if ( isset( $address_object[ $field ] ) ) {
				continue;
			}
			$address_object[ $field ] = '';
		}

		foreach ( $address_object as $key => $value ) {
			if ( isset( $this->get_properties()[ $key ]['type'] ) && 'boolean' === $this->get_properties()[ $key ]['type'] ) {
				$address_object[ $key ] = (bool) $value;
			} else {
				$address_object[ $key ] = $this->prepare_html_response( $value );
			}
		}
		return $address_object;
	}

	throw new RouteException(
		'invalid_object_type',
		sprintf(
			/* translators: Placeholders are class and method names */
			__( '%1$s requires an instance of %2$s or %3$s for the address', 'woocommerce' ),
			'ShippingAddressSchema::get_item_response',
			'WC_Customer',
			'WC_Order'
		),
		500
	);
}