Automattic\WooCommerce\Blocks\Domain\Services
CheckoutFields::register_field_attributes
Processes the attributes supplied during field registration.
Метод класса: CheckoutFields{}
Хуков нет.
Возвращает
Массив. The processed attributes.
Использование
// private - только в коде основоного (родительского) класса $result = $this->register_field_attributes( $id, $attributes );
- $id(массив) (обязательный)
- The field ID.
- $attributes(массив) (обязательный)
- The attributes supplied during field registration.
Код CheckoutFields::register_field_attributes() CheckoutFields::register field attributes WC 10.4.0
private function register_field_attributes( $id, $attributes ) {
// We check if attributes are valid. This is done to prevent too much nesting and also to allow field registration
// even if the attributes property is invalid. We can just skip it and register the field without attributes.
if ( empty( $attributes ) ) {
return [];
}
if ( ! is_array( $attributes ) || 0 === count( $attributes ) ) {
$message = sprintf( 'An invalid attributes value was supplied when registering field with id: "%s". %s', $id, 'Attributes must be a non-empty array.' );
_doing_it_wrong( 'woocommerce_register_additional_checkout_field', esc_html( $message ), '8.6.0' );
return [];
}
// These are formatted in camelCase because React components expect them that way.
$allowed_attributes = [
'maxLength',
'readOnly',
'pattern',
'autocomplete',
'autocapitalize',
'title',
];
$valid_attributes = array_filter(
$attributes,
function ( $_, $key ) use ( $allowed_attributes ) {
return in_array( $key, $allowed_attributes, true ) || strpos( $key, 'aria-' ) === 0 || strpos( $key, 'data-' ) === 0;
},
ARRAY_FILTER_USE_BOTH
);
// Any invalid attributes should show a doing_it_wrong warning. It shouldn't stop field registration, though.
if ( count( $attributes ) !== count( $valid_attributes ) ) {
$invalid_attributes = array_keys( array_diff_key( $attributes, $valid_attributes ) );
$message = sprintf( 'Invalid attribute found when registering field with id: "%s". Attributes: %s are not allowed.', $id, implode( ', ', $invalid_attributes ) );
_doing_it_wrong( 'woocommerce_register_additional_checkout_field', esc_html( $message ), '8.6.0' );
}
// Escape attributes to remove any malicious code and return them.
return array_map(
function ( $value ) {
return esc_attr( $value );
},
$valid_attributes
);
}