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 10.8.1
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 or if it is hidden.
if (
true !== wc_string_to_bool( $address_field['required'] ?? false ) ||
true === wc_string_to_bool( $address_field['hidden'] ?? false )
) {
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 );
}
}
}