'Rearrange (sort by priority) Woocommerce my account fields
How can I rearrange my-account
fields .I want to locate billing_address_1
field after billing_state
and billing_city
fields.
I used woocommerce_form_field_args
hook and then used switch
to find every single arg
.
function bcod_wc_form_field_args( $args, $key, $value ){
switch ($key) {
case 'billing_country':
$args['class'] = array('hidden');
break;
case 'billing_address_1' :
$args['priority'] = '85';// push down this field to bottom of state and city
$args['label'] = $args['label'] . ' Priority : ' . $args['priority'];
$args['placeholder'] = 'خیابان اصلی ، خیابان فرعی ، کوچه ، پلاک';
break;
case 'billing_state' :
$args['priority'] = '50';
$args['label'] = $args['label'] . ' Priority : ' . $args['priority'];
$args['class'] = array('form-row-first');
break;
case 'billing_city' :
$args['priority'] = '55';
$args['label'] = $args['label'] . ' Priority : ' . $args['priority'];
$args['class'] = array('form-row-last');
break;
case 'billing_postcode' :
$args['label'] = $args['label'] . ' Priority : ' . $args['priority'];
$args['priority'] = '190';
$args['class'] = array('form-row-first');
break;
case 'billing_email' :
$args['label'] = $args['label'] . ' Priority : ' . $args['priority'];
$args['priority'] = '80';
$args['class'] = array('form-row-last');
break;
default:
return $args;
break;
}
return $args;
}
I expect the billing_address_1
field located after state
and city
But this code does not affect the sort of fields . priorities are changed but the fields are at the default places . this image is my result :
(source: imgurl.ir)
Solution 1:[1]
To rearrange the "My account" Adresses billing fields, you'll need to use something like:
// Change billing fields location
add_filter( 'woocommerce_billing_fields', 'arrange_billing_fields', 10, 1 );
function arrange_billing_fields( $fields ){
// Only on my account
if( is_account_page() ) :
$fields['billing_country']['class'] = array('hidden');
$fields['billing_state']['priority'] = '50';
$fields['billing_state']['label'] .= ' (Priority : '.$fields['billing_state']['priority'].')';
$fields['billing_state']['class'] = array('form-row-first');
$fields['billing_city']['priority'] = '55';
$fields['billing_city']['label'] .= ' (Priority : '.$fields['billing_city']['priority'].')';
$fields['billing_city']['class'] = array('form-row-last');
$fields['billing_email']['priority'] = '80';
$fields['billing_email']['label'] .= ' (Priority : '.$fields['billing_email']['priority'].')';
$fields['billing_email']['class'] = array('form-row-last');
$fields['billing_address_1']['priority'] = '85';
$fields['billing_address_1']['label'] .= ' (Priority : '.$fields['billing_address_1']['priority'].')';
$fields['billing_address_1']['placeholder'] = '?????? ???? ? ?????? ???? ? ???? ? ????';
$fields['billing_postcode']['priority'] = '190';
$fields['billing_postcode']['label'] .= ' (Priority : '.$fields['billing_postcode']['priority'].')';
$fields['billing_postcode']['class'] = array('form-row-first');
endif;
return $fields;
}
// For the state field priority location for some countries
add_filter( 'woocommerce_get_country_locale', 'custom_country_locale', 10, 1 );
function custom_country_locale( $countries_locale ){
// Only on my account
if( is_account_page() ):
// Loop Through country locale array
foreach( $countries_locale as $country_code => $fields ){
// Loop through defined fields (targeting the state field)
foreach( $fields as $field_key => $data ) {
if( $field_key == 'state' && isset($data['priority']) ){
$countries_locale[$country_code][$field_key]['priority'] = '50';
}
}
}
endif;
return $countries_locale;
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | LoicTheAztec |