AI Zusammenfassung
Möchten Sie festlegen, wie sich das Feld „Bundesstaat/Provinz/Region“ verhält, wenn ein Benutzer im Adressfeld „Vereinigtes Königreich“ auswählt? Bei Verwendung des internationalen Schemas blendet WPForms das Feld „Bundesstaat/Provinz/Region“ für das Vereinigte Königreich standardmäßig aus, da es dort keine Bundesstaaten im herkömmlichen Sinne gibt. Wenn Sie stattdessen einen Wert wie das Land (England, Schottland, Wales oder Nordirland) oder die Grafschaft erfassen möchten, können Sie dies mit einem benutzerdefinierten Code-Schnipsel tun.
In dieser Anleitung erfahren Sie, wie Sie das Feld „Bundesstaat/Provinz/Region“ für das Vereinigte Königreich wieder aktivieren, dessen Bezeichnung ändern und das Texteingabefeld durch eine Auswahlliste mit den Ländern des Vereinigten Königreichs ersetzen können.
Erstellen des Snippets
Bevor wir loslegen, schau dir unbedingt unser Tutorial an, in dem erklärt wird, wie du benutzerdefinierte Code-Schnipsel zu deiner Website hinzufügen kannst.
Dieser Codeausschnitt erfüllt zwei Funktionen. Erstens entfernt er das Vereinigte Königreich aus der Liste der Länder, bei denen das Feld „Bundesstaat/Provinz/Region“ ausgeblendet ist. Zweitens fügt er im Frontend ein kleines Stück JavaScript hinzu, das die Beschriftung des Feldes aktualisiert und das Texteingabefeld durch ein Dropdown-Menü ersetzt, sobald der Benutzer das Vereinigte Königreich auswählt.
Fügen Sie einfach den folgenden Codeausschnitt in Ihre Website ein.
/**
* 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
Der Codeausschnitt ist so konzipiert, dass er 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 „Vereinigtes Königreich“ ausgewählt ist. Sie lautetCountrystandardmäßig. Falls Sie es vorziehenCountyoder bei einem anderen Label ändern Sie diesen Wert.countryPlaceholder: Der Platzhalter, der als erste Option in der Dropdown-Liste angezeigt wird. Passen Sie diesen an Ihre neue Bezeichnung an.gbCountries: Die Liste der Optionen, die im Dropdown-Menü angezeigt wird. Standardmäßig enthält diese England, Schottland, Wales und Nordirland. Sie können Einträge nach Bedarf hinzufügen, entfernen oder umbenennen. Wenn Sie beispielsweise stattdessen Grafschaften im Vereinigten Königreich erfassen möchten, ersetzen Sie die Liste durch Ihre bevorzugten Grafschaften.
Wenn der Benutzer ein anderes Land als das Vereinigte Königreich auswählt, stellt das Snippet automatisch die ursprüngliche Texteingabe für „Bundesstaat/Provinz/Region“ und deren Bezeichnung wieder her.
Das war’s! Sie haben das Adressfeld für das internationale Schema erfolgreich angepasst, wenn „Vereinigtes Königreich“ ausgewählt ist. Möchten Sie weitere Möglichkeiten zur Anpassung Ihrer Formularfelder entdecken? Werfen Sie einen Blick auf unser Tutorial zur Auswahl des richtigen Adressfeldformats.