Automattic\WooCommerce\StoreApi\Utilities
OrderController::validate_address_fields()
Check all required address fields are set and return errors if not.
Метод класса: OrderController{}
Хуков нет.
Возвращает
null
. Ничего (null).
Использование
// protected - в коде основоного (родительского) или дочернего класса $result = $this->validate_address_fields( $order, $address_type, $errors );
- $order(\WC_Order) (обязательный)
- Order object.
- $address_type(строка) (обязательный)
- billing or shipping address, used in error messages.
- $errors(\WP_Error) (обязательный)
- Error object.
Код OrderController::validate_address_fields() OrderController::validate address fields WC 8.7.0
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 = isset( $all_locales[ $address['country'] ] ) ? $all_locales[ $address['country'] ] : array(); $additional_fields = $this->additional_fields_controller->get_all_fields_from_order( $order ); foreach ( $additional_fields as $field_id => $field_value ) { $prefix = '/' . $address_type . '/'; if ( strpos( $field_id, $prefix ) === 0 ) { $address[ str_replace( $prefix, '', $field_id ) ] = $field_value; } } $fields = $this->additional_fields_controller->get_additional_fields(); $address_fields_keys = $this->additional_fields_controller->get_address_fields_keys(); $address_fields = array_filter( $fields, function( $key ) use ( $address_fields_keys ) { return in_array( $key, $address_fields_keys, true ); }, ARRAY_FILTER_USE_KEY ); if ( $current_locale ) { foreach ( $current_locale as $key => $field ) { if ( isset( $address_fields[ $key ] ) ) { $address_fields[ $key ]['label'] = isset( $field['label'] ) ? $field['label'] : $address_fields[ $key ]['label']; $address_fields[ $key ]['required'] = isset( $field['required'] ) ? $field['required'] : $address_fields[ $key ]['required']; } } } foreach ( $address_fields as $address_field_key => $address_field ) { if ( empty( $address[ $address_field_key ] ) && $address_field['required'] ) { /* 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 ); } } }