KI-Zusammenfassung
Möchten Sie anpassen, wie das Feld Bundesland/Kanton/Region funktioniert, wenn ein Benutzer das Vereinigte Königreich in Ihrem Adressfeld auswählt? Bei Verwendung des internationalen Schemas blendet WPForms das Feld Bundesland/Kanton/Region für das Vereinigte Königreich standardmäßig aus, da das Vereinigte Königreich Bundesländer nicht im herkömmlichen Sinne verwendet. Wenn Sie stattdessen einen Wert wie das Land (England, Schottland, Wales oder Nordirland) oder den Landkreis erfassen möchten, können Sie dies mit einem benutzerdefinierten Code-Snippet tun.
Dieses Tutorial zeigt Ihnen, wie Sie das Feld Bundesland/Kanton/Region für das Vereinigte Königreich wieder aktivieren, seine Beschriftung ändern und die Texteingabe durch eine Dropdown-Liste der britischen Länder ersetzen.
Erstellen des Snippets
Bevor wir beginnen, lesen Sie unbedingt unser Tutorial, wie Sie benutzerdefinierte Code-Snippets zu Ihrer Website hinzufügen.
Dieses Snippet tut zwei Dinge. Erstens entfernt es das Vereinigte Königreich aus der Liste der Länder, für die das Feld Bundesland/Kanton/Region ausgeblendet wird. Zweitens fügt es ein kleines JavaScript-Stück zum Frontend hinzu, das die Beschriftung des Feldes aktualisiert und die Texteingabe durch eine Dropdown-Liste ersetzt, wann immer der Benutzer das Vereinigte Königreich auswählt.
Fügen Sie das folgende Snippet zu Ihrer Website hinzu.
/**
* 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
}
Anpassen des Snippets
Das Snippet ist so konzipiert, dass es an Ihren Anwendungsfall angepasst werden kann. Hier sind die drei Variablen am Anfang des JavaScript-Blocks, die Sie möglicherweise bearbeiten möchten.
countryLabel: Die Beschriftung, die über dem Feld angezeigt wird, wenn das Vereinigte Königreich ausgewählt ist. Standardmäßig ist sie aufLandeingestellt. Wenn SieLandkreisoder eine andere Beschriftung bevorzugen, ändern Sie diesen Wert.countryPlaceholder: Der Platzhalter, der als erste Option in der Dropdown-Liste angezeigt wird. Aktualisieren Sie diesen, um ihn an Ihre neue Beschriftung anzupassen.gbCountries: Die Liste der Optionen, die in der Dropdown-Liste angezeigt werden. Standardmäßig enthält sie England, Schottland, Wales und Nordirland. Sie können Einträge nach Bedarf hinzufügen, entfernen oder umbenennen. Wenn Sie beispielsweise britische Landkreise erfassen möchten, ersetzen Sie die Liste durch Ihre bevorzugten Landkreise.
Wenn der Benutzer ein anderes Land als das Vereinigte Königreich auswählt, stellt das Snippet automatisch die ursprüngliche Texteingabe und die Beschriftung für Bundesland/Kanton/Region wieder her.
Das ist alles! Sie haben das Adressfeld für das internationale Schema erfolgreich angepasst, wenn das Vereinigte Königreich ausgewählt ist. Möchten Sie weitere Möglichkeiten zur Anpassung Ihrer Formularfelder erkunden? Sehen Sie sich unser Tutorial an, wie Sie das richtige Adressfeldformat auswählen.