Automattic\WooCommerce\StoreApi\Utilities

OrderController::validate_address_fields()protectedWC 1.0

Check all required address fields are set and return errors if not.

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

Хуков нет.

Возвращает

null. Ничего.

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

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->validate_address_fields( $address, $address_type, $errors );
$address(массив) (обязательный)
Address array.
$address_type(строка) (обязательный)
billing or shipping address, used in error messages.
$errors(\WP_Error) (обязательный)
Error object.

Код OrderController::validate_address_fields() WC 7.5.1

protected function validate_address_fields( $address, $address_type, \WP_Error $errors ) {
	$all_locales    = wc()->countries->get_country_locale();
	$current_locale = isset( $all_locales[ $address['country'] ] ) ? $all_locales[ $address['country'] ] : [];

	/**
	 * We are not using wc()->counties->get_default_address_fields() here because that is filtered. Instead, this array
	 * is based on assets/js/base/components/cart-checkout/address-form/default-address-fields.js
	 */
	$address_fields = [
		'first_name' => [
			'label'    => __( 'First name', 'woocommerce' ),
			'required' => true,
		],
		'last_name'  => [
			'label'    => __( 'Last name', 'woocommerce' ),
			'required' => true,
		],
		'company'    => [
			'label'    => __( 'Company', 'woocommerce' ),
			'required' => false,
		],
		'address_1'  => [
			'label'    => __( 'Address', 'woocommerce' ),
			'required' => true,
		],
		'address_2'  => [
			'label'    => __( 'Apartment, suite, etc.', 'woocommerce' ),
			'required' => false,
		],
		'country'    => [
			'label'    => __( 'Country/Region', 'woocommerce' ),
			'required' => true,
		],
		'city'       => [
			'label'    => __( 'City', 'woocommerce' ),
			'required' => true,
		],
		'state'      => [
			'label'    => __( 'State/County', 'woocommerce' ),
			'required' => true,
		],
		'postcode'   => [
			'label'    => __( 'Postal code', 'woocommerce' ),
			'required' => true,
		],
	];

	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 );
		}
	}
}