You can rename the state field label at WooCommerce checkout with one filter for the default address field labels and a second one for countries that set their own label, such as the US. The same pattern works for any other billing or shipping field like city, postcode, or company.
Why Rename Checkout Address Field Labels
- “State” doesn’t match local terminology in every country (province, region, county)
- Keeps checkout language consistent with the rest of your store’s tone
- A single filter covers both billing and shipping versions of the field
- The same technique extends to renaming any other default address field
Step 1: Rename the State Field
/** Rename "State" to "Province" for both billing and shipping */
add_filter( 'woocommerce_default_address_fields', 'relabel_state_as_province', 9999 );
function relabel_state_as_province( $address_fields ) {
$address_fields['state']['label'] = 'Province';
return $address_fields;
}
// Countries such as the US set their own state label, which wins over the default above
add_filter( 'woocommerce_get_country_locale', 'relabel_state_as_province_in_locales', 9999 );
function relabel_state_as_province_in_locales( $locale ) {
foreach ( $locale as $country => $fields ) {
if ( isset( $fields['state']['label'] ) ) {
$locale[ $country ]['state']['label'] = 'Province';
}
}
return $locale;
}

Renaming Other Address Fields the Same Way
/** Rename "Company Name" to "Business Name" using the same pattern */
add_filter( 'woocommerce_default_address_fields', 'relabel_company_as_business_name', 9999 );
function relabel_company_as_business_name( $address_fields ) {
$address_fields['company']['label'] = 'Business Name';
return $address_fields;
}Troubleshooting
Label reverts to “State” a moment after the page loads
WooCommerce’s country-specific address localization script (address-i18n.min.js) re-applies its own labels based on the selected country’s locale settings, which can override a PHP-only label change after load. That is why the snippet also filters woocommerce_get_country_locale: it changes the label at the locale level, so the script doesn’t reset it.
Change only applies to billing, not shipping (or vice versa)
The woocommerce_default_address_fields filter affects both by default — if only one updates, check for a theme or plugin applying a separate, more specific filter like woocommerce_billing_fields that runs afterward and resets it.
Frequently Asked Questions
Which field keys can I rename with this filter?
Any default address field: state, country, first_name, last_name, company, address_1, address_2, city, and postcode all use the same array structure.
Can I rename the field differently per country?
Yes, but that requires filtering woocommerce_get_country_locale instead, since that filter controls per-country field overrides specifically.
Does renaming a label affect the underlying field’s data or validation?
No, only the visible label text changes — the field’s name, validation rules, and stored data key stay exactly the same.
Conclusion
Renaming the state field label at WooCommerce checkout takes two filters: one for the default label and one for the country-specific labels that WooCommerce’s locale script applies after page load. Test the checkout with a few different countries selected to confirm your label survives the JavaScript re-render.
See also How to Move Labels Inside WooCommerce Checkout Fields. Then read How to Set a Default Billing State or Country at WooCommerce Checkout.
Prefer no code? All-in-One Utilities Woo Add-on adds over 50 WooCommerce features, so you can switch them on without code.