Reputation: 21
In woocommerce already the shipping country in restricted to IN On checkout the default value of Country, state & city is set I want to do that same in my-account/edit-address/ only in shipping address tried using this code but its not working
add_filter( 'woocommerce_shipping_fields' , 'default_shipping_address' );
function default_shipping_address( $fields ) {
$fields['shipping_city']['default'] = 'Mumbai';
$fields['shipping_state']['default'] = 'Maharashtra';
return $fields;
}
this is not working let me know what's wrong or is there any other way to do this?
Upvotes: 1
Views: 2485
Reputation: 253978
You are pretty near… As Shipping State value in WooCommerce is a state code, you need to replace 'Maharashtra' with 'MH' (For India) as follows:
add_filter( 'woocommerce_shipping_fields' , 'set_default_my_account_shipping_city_state_values' );
function set_default_my_account_shipping_city_state_values( $fields ) {
// Targeting My account section
if( is_account_page() ) {
$fields['shipping_city']['default'] = 'Mumbai';
$fields['shipping_state']['default'] = 'MH'; // <== HERE
}
return $fields;
}
Code goes in functions.php file of the active child theme (or active theme). Tested and works.
Alternative: If it really doesn't work for you, you can try to use the following:
add_action( 'template_redirect' , 'set_default_shipping_city_and_state_values' );
function set_default_shipping_city_and_state_values( $fields ) {
if( is_wc_endpoint_url( 'edit-address' ) ) {
if ( WC()->customer->get_shipping_city() === '' ) {
WC()->customer->Set_shipping_city('Mumbai');
}
if ( WC()->customer->get_shipping_state() === '' ) {
WC()->customer->Set_shipping_state('MH');
}
}
}
Upvotes: 2
Reputation: 108
You can use the address hook.
add_filter( 'woocommerce_default_address_fields' , 'default_shipping_address' );
function default_shipping_address( $fields ) {
$fields['shipping_city']['value'] = 'Mumbai';
$fields['shipping_state']['value'] = 'Maharashtra';
return $fields;
}
Upvotes: 0