Personnalisation du champ d'État pour le Royaume-Uni dans le schéma d'adresses internationales

Souhaitez-vous personnaliser le comportement du champ État/Province/Région lorsqu'un utilisateur sélectionne le Royaume-Uni dans votre champ Adresse ? Lorsque vous utilisez le schéma international, WPForms masque le champ État/Province/Région par défaut pour le Royaume-Uni, car le Royaume-Uni n'utilise pas d'États au sens traditionnel. Si vous souhaitez plutôt collecter une valeur telle que le pays (Angleterre, Écosse, Pays de Galles ou Irlande du Nord) ou le comté, vous pouvez le faire avec un extrait de code personnalisé.

Ce tutoriel vous montrera comment réactiver le champ État/Province/Région pour le Royaume-Uni, modifier son libellé et remplacer le champ de texte par une liste déroulante des pays du Royaume-Uni.


Création de l'extrait

Avant de commencer, assurez-vous de consulter notre tutoriel sur la façon d'ajouter des extraits de code personnalisés à votre site.

Cet extrait fait deux choses. Premièrement, il supprime le Royaume-Uni de la liste des pays pour lesquels le champ État/Province/Région est masqué. Deuxièmement, il ajoute un petit morceau de JavaScript au frontend qui met à jour le libellé du champ et remplace le champ de texte par une liste déroulante chaque fois que l'utilisateur sélectionne le Royaume-Uni.

Allez-y et ajoutez l'extrait suivant à votre site.

/**
 * Customize the Address field State/Province/Region input when
 * the United Kingdom is selected in the International scheme.
 *
 * @link https://wpforms.com/developers/customizing-the-state-field-for-the-united-kingdom-in-the-international-address-scheme
 */

add_filter( 'wpforms_forms_fields_address_frontend_strings_list_countries_without_states', 'wpf_forms_fields_address_frontend_strings_list_countries_without_states' );

function wpf_forms_fields_address_frontend_strings_list_countries_without_states( $countries ) {

	return array_diff( $countries, [ 'GB' ] );
}

add_action( 'wpforms_frontend_js', 'wpf_forms_fields_address_frontend_great_britain_countries_list' );
function wpf_forms_fields_address_frontend_great_britain_countries_list( $forms) {
	$load = false;

	foreach ( $forms as $form ) {
		if ( wpforms_has_field_type( 'address', $form ) ) {
			$load = true;

			break;
		}
	}

	if ( ! $load ) {
		return;
	}

	?>
	<script>
		jQuery( document ).ready( function ( $ ) {
			const countryLabel = 'Country'; // TODO: Change it if needed.
			const countryPlaceholder = '--- Country ---'; // TODO: Change it if needed.
			const gbCountries = [ // TODO: Update it if needed.
				{ value: 'England', label: 'England' },
				{ value: 'Scotland', label: 'Scotland' },
				{ value: 'Wales', label: 'Wales' },
				{ value: 'Northern Ireland', label: 'Northern Ireland' }
			];

			const originalFields = {};

			$( '.wpforms-field-address-state' ).each( function () {
				const $field = $( this ),
					$label = $field.closest( '.wpforms-field-row-block' ).find( 'label' ),
					fieldId = $field.attr( 'id' );

				originalFields[ fieldId ] = {
					label: $label.length ? $label.text() : '',
					placeholder: $field.attr( 'placeholder' ) || '',
					value: $field.val(),
				};
			} );

			$( document )
				.on( 'change', '.wpforms-field-address-country', function () {
					const $countryField = $( this ),
						$field = $( this ).closest( '.wpforms-field' ),
						$stateField = $field.find( '.wpforms-field-address-state' ),
						$stateLabel = $stateField.closest( '.wpforms-field-row-block' ).find( 'label' ),
						stateFieldId = $stateField.attr( 'id' ),
						stateFieldName = $stateField.attr( 'name' );

					if ( $countryField.val() === 'GB' ) {
						$stateLabel.text( countryLabel );

						let selectHTML = `<select class="wpforms-field-address-state" id="${ stateFieldId }" name="${ stateFieldName }">`;

						selectHTML += `<option value="">${ countryPlaceholder }</option>`;

						$.each( gbCountries, function ( index, country ) {
							selectHTML += `<option value="${ country.value }">${ country.label }</option>`;
						} );

						selectHTML += '</select>';

						$stateField.replaceWith( selectHTML );

						return;
					}

					// Replace the select field back to input text
					if ( $stateField.is( 'select' ) ) {
						$stateField.replaceWith( `<input type="text" class="wpforms-field-address-state" id="${ stateFieldId }" name="${ $stateField.attr( 'name' ) }" placeholder="${ originalFields[ stateFieldId ].placeholder }" value="${ originalFields[ stateFieldId ].value }">` );
					}

					// Replace label back.
					if ( originalFields[ stateFieldId ] ) {
						$stateLabel.text( originalFields[ stateFieldId ].label );
					}
				} );
		} );
	</script>
	<?php
}

Personnalisation de l'extrait

L'extrait est conçu pour être ajusté à votre cas d'utilisation. Voici les trois variables en haut du bloc JavaScript que vous pourriez vouloir modifier.

  • countryLabel : Le libellé affiché au-dessus du champ lorsque le Royaume-Uni est sélectionné. Il est défini sur Country par défaut. Si vous préférez County ou tout autre libellé, modifiez cette valeur.
  • countryPlaceholder : Le texte de remplacement affiché comme première option dans la liste déroulante. Mettez à jour ceci pour correspondre à votre nouveau libellé.
  • gbCountries : La liste des options affichées dans la liste déroulante. Par défaut, elle contient l'Angleterre, l'Écosse, le Pays de Galles et l'Irlande du Nord. Vous pouvez ajouter, supprimer ou renommer des entrées selon vos besoins. Par exemple, si vous souhaitez collecter les comtés du Royaume-Uni à la place, remplacez la liste par vos comtés préférés.

Lorsque l'utilisateur sélectionne un pays autre que le Royaume-Uni, l'extrait restaure automatiquement le champ de texte et son libellé d'origine pour l'État/la Province/la Région.

Et voilà ! Vous avez personnalisé avec succès le champ Adresse pour le schéma international lorsque le Royaume-Uni est sélectionné. Souhaitez-vous explorer d'autres façons de personnaliser vos champs de formulaire ? Consultez notre tutoriel sur la façon de choisir le bon format de champ d'adresse.