Reputation:
I have rearranged the order fields on the Woocommerce checkout page with this function:
//Reorder checkout
add_filter( 'woocommerce_checkout_fields', 'reorder_woo_fields' );
function reorder_woo_fields( $fields ) {
$fields2['billing']['billing_first_name'] = $fields['billing'] ['billing_first_name'];
$fields2['billing']['billing_last_name'] = $fields['billing']['billing_last_name'];
$fields2['billing']['billing_company'] = $fields['billing']['billing_company'];
$fields2['billing']['billing_address_1'] = $fields['billing']['billing_address_1'];
$fields2['billing']['billing_city'] = $fields['billing']['billing_city'];
$fields2['billing']['billing_postcode'] = $fields['billing']['billing_postcode'];
$fields2['billing']['billing_country'] = $fields['billing']['billing_country'];
$fields2['billing']['billing_email'] = $fields['billing']['billing_email'];
$fields2['billing']['billing_phone'] = $fields['billing']['billing_phone'];
$fields2['shipping']['shipping_first_name'] = $fields['shipping']['shipping_first_name'];
$fields2['shipping']['shipping_last_name'] = $fields['shipping']['shipping_last_name'];
$fields2['shipping']['shipping_company'] = $fields['shipping']['shipping_company'];
$fields2['shipping']['shipping_address_1'] = $fields['shipping']['shipping_address_1'];
$fields2['shipping']['shipping_city'] = $fields['shipping']['shipping_city'];
$fields2['shipping']['shipping_postcode'] = $fields['shipping']['shipping_postcode'];
$fields2['shipping']['shipping_country'] = $fields['shipping']['shipping_country'];
// Add full width Classes and Clears to Adjustments
$fields2['billing']['billing_first_name'] = array(
'label' => __('First Name', 'woocommerce'),
'class' => array('form-row-wide'),
'clear' => true,
'required' => true
);
$fields2['billing']['billing_last_name'] = array(
'label' => __('Last Name', 'woocommerce'),
'class' => array('form-row-wide'),
'clear' => true,
'required' => true
);
$fields2['shipping']['shipping_first_name'] = array(
'label' => __('First Name', 'woocommerce'),
'class' => array('form-row-wide'),
'clear' => true,
'required' => true
);
$fields2['shipping']['shipping_last_name'] = array(
'label' => __('Last Name', 'woocommerce'),
'class' => array('form-row-wide'),
'clear' => true,
'required' => true
);
return $fields2;
}
and this works, but when enabling debug mode I am getting an error on the chekcout page: Notice: Undefined index: order in /html/wordpress/wp-content/plugins/woocommerce/templates/checkout/form-shipping.php on line 58
Warning: Invalid argument supplied for foreach() in /html/wordpress/wp-content/plugins/woocommerce/templates/checkout/form-shipping.php on line 58
Can aynone make sense of this?
Upvotes: 0
Views: 5952
Reputation: 359
You can try below code for reorder the checkout page fields. You can chnage the order of fields in the array.
// for billing fields
add_filter("woocommerce_checkout_fields", "new_order_fields");
function new_order_fields($fields) {
$order = array(
"billing_company",
"billing_first_name",
"billing_last_name",
"billing_address_1",
"billing_address_2",
"billing_postcode",
"billing_country",
"billing_email",
"billing_phone"
);
foreach( $order as $field ) {
$ordered_fields[$field] = $fields["billing"][$field];
}
$fields["billing"] = $ordered_fields;
return $fields;
}
// for shipping fields
add_filter("woocommerce_checkout_fields", "new_shiping_order_fields");
function new_shiping_order_fields($fields) {
$order = array(
"shipping_city",
"shipping_postcode",
"shipping_country",
"shipping_first_name",
"shipping_last_name",
"shipping_company",
"shipping_address_1",
"shipping_address_2"
);
foreach( $order as $field ) {
$ordered_fields[$field] = $fields["shipping"][$field];
}
$fields["shipping"] = $ordered_fields;
return $fields;
}
Upvotes: 5
Reputation: 1
You can find a complete guide about that in the WooCommerce docs.
You are defining a new array $fields2
and this array doesn't have all the fields required in woocommerce_checkout_fields
. You only need to override $fields["billing"]
and $fields["shipping"]
just like @pallavi showed you.
To remove a field (ex. order_comments) you can put this line in your function
unset($fields['order']['order_comments']);
Upvotes: 0