Automattic\WooCommerce\Blocks\Domain\Services

CheckoutFieldsFrontend::edit_address_fields()publicWC 1.0

Adds additional address fields to the My Account edit address form.

Method of the class: CheckoutFieldsFrontend{}

No Hooks.

Return

Array. Updated address fields.

Usage

$CheckoutFieldsFrontend = new CheckoutFieldsFrontend();
$CheckoutFieldsFrontend->edit_address_fields( $address, $address_type );
$address(array) (required)
Address fields.
$address_type(string) (required)
Type of address (billing or shipping).

CheckoutFieldsFrontend::edit_address_fields() code WC 9.8.1

public function edit_address_fields( $address, $address_type ) {
	$customer = new WC_Customer( get_current_user_id() );

	if ( Features::is_enabled( 'experimental-blocks' ) ) {
		$document_object = new DocumentObject();
		$document_object->set_customer( $customer );
		$document_object->set_context( $address_type . '_address' );
		$fields = $this->checkout_fields_controller->get_contextual_fields_for_location( 'address', $document_object );
	} else {
		$fields = $this->checkout_fields_controller->get_fields_for_location( 'address' );
	}

	foreach ( $fields as $key => $field ) {
		$field_key                      = CheckoutFields::get_group_key( $address_type ) . $key;
		$address[ $field_key ]          = $field;
		$address[ $field_key ]['value'] = $this->checkout_fields_controller->get_field_from_object( $key, $customer, $address_type );

		if ( 'select' === $field['type'] ) {
			$address[ $field_key ]['options'] = array_column( $field['options'], 'label', 'value' );

			// If a placeholder is set, add a placeholder option if it doesn't exist already.
			if (
				! empty( $address[ $field_key ]['placeholder'] )
				&& ! array_key_exists( '', $address[ $field_key ]['options'] )
			) {
				$address[ $field_key ]['options'] = array( '' => $address[ $field_key ]['placeholder'] ) + $address[ $field_key ]['options'];
			}
		}

		if ( 'checkbox' === $field['type'] ) {
			$address[ $field_key ]['checked_value']   = '1';
			$address[ $field_key ]['unchecked_value'] = '0';
		}
	}

	return $address;
}