Automattic\WooCommerce\StoreApi\Utilities
OrderController::validate_address_fields
Check all required address fields are set and return errors if not.
Method of the class: OrderController{}
No Hooks.
Returns
null
. Nothing (null).
Usage
// protected - for code of main (parent) or child class $result = $this->validate_address_fields( $order, $address_type, $errors );
- $order(WC_Order) (required)
- Order object.
- $address_type(string) (required)
- billing or shipping address, used in error messages.
- $errors(WP_Error) (required)
- Error object.
OrderController::validate_address_fields() OrderController::validate address fields code WC 9.9.5
protected function validate_address_fields( \WC_Order $order, $address_type, \WP_Error $errors ) { $all_locales = wc()->countries->get_country_locale(); $address = $order->get_address( $address_type ); $current_locale = $all_locales[ $address['country'] ] ?? []; foreach ( $all_locales['default'] as $key => $value ) { // If $current_locale[ $key ] is not empty, merge it with locale default, otherwise just use default locale. $current_locale[ $key ] = ! empty( $current_locale[ $key ] ) ? wp_parse_args( $current_locale[ $key ], $value ) : $value; } $additional_fields = $this->additional_fields_controller->get_all_fields_from_object( $order, $address_type ); $address = array_merge( $address, $additional_fields ); foreach ( $current_locale as $address_field_key => $address_field ) { // Skip validation if field is not required. if ( true !== $address_field['required'] ) { continue; } // Check if field is not set, is an empty string, or is an empty array. $is_empty = ! isset( $address[ $address_field_key ] ) || ( is_string( $address[ $address_field_key ] ) && '' === trim( $address[ $address_field_key ] ) ) || ( is_array( $address[ $address_field_key ] ) && 0 === count( $address[ $address_field_key ] ) ); if ( $is_empty ) { /* translators: %s Field label. */ $errors->add( $address_type, sprintf( __( '%s is required', 'woocommerce' ), $address_field['label'] ), $address_field_key ); } } // Validate additional fields. $result = $this->additional_fields_controller->validate_fields_for_location( $address, 'address', $address_type ); if ( $result->has_errors() ) { // Add errors to main error object but ensure they maintain the billing/shipping error code. foreach ( $result->get_error_codes() as $code ) { $errors->add( $address_type, $result->get_error_message( $code ), $code ); } } }