1
votes

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?

enter image description here

2
Some feed back on my answer below will be really appreciated please.LoicTheAztec

2 Answers

2
votes

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');
        }
    }
}
0
votes

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;
}