Are you shipping products to limited postcodes and want to show only those as a drop-down on the WooCommerce PIN Code field? The code given below will help you to achieve this customization on both shipping and billing fields.
add_filter( 'woocommerce_default_address_fields' , 'ts_customize_postcode_fields' );
function ts_customize_postcode_fields( $address_fields ) {
$address_fields['postcode']['type'] = 'select';
$address_fields['postcode']['options'] = array(
'' => __('Select your postcode', 'woocommerce'),
'560043' => '560043',
'560038' => '560038',
'560025' => '560025'
);
// Add custom validation callback
$address_fields['postcode']['validate'] = array('ts_validate_postcode');
return $address_fields;
}
// Custom validation callback
function ts_validate_postcode( $postcode, $field ) {
// Check if the selected option is not empty and is a valid postcode
if ( ! empty( $postcode ) && ! in_array( $postcode, array('560043', '560038', '560025') ) ) {
// Display an error if the postcode is not valid
throw new Exception( __( 'Please select a valid postcode.', 'woocommerce' ) );
}
return $postcode;
}
Output
The below output shows a PinCode field with a dropdown of postcodes listed in the code.

Similar to the above customization, you can also change the city field to a drop down in the WooCommerce shipping calculator by replacing the default text field.

not working
Hi Ritesh,
I have tested the code and it works well in my updated WooCommerce version of 8.5.1. Please try switching to a default WordPress theme and deactivating other plugins to check if there is a theme/plugin conflict. Ensure that the version of WooCommerce is up to date. If it is still not working, you can provide additional details for further assistance.
THANKS, ITS WORKING NOW.