Ad

How To Reorder Additional Fields On Checkout Page In WooCommerce

I cant figure out how to reorder the additional fields, on the checkout page in WooCommerce.

I have added one extra field to the WooCommerce additional information section. I would like to show the time field first then the order notes below it.

This is the code that I am using:

add_filter(  'woocommerce-additional-fields', 'custom_order_fields', 20, 1 );
function custom_order_fields( $fields ) {
   
    $fields['order_comments']['priority'] = 80;
    $fields['woocommerce-delivery-time-field']['priority'] = 70;  
   
    return $fields;
}

However, this does not have the desired result. Can someone tell me what I'm doing wrong?

Ad

Answer

If you want to show your custom field first, and then the order notes.

You can either use:

// Add 'delivery time' field before 'order comments'
function filter_woocommerce_checkout_fields( $fields ) {    
    // Get 'order comments' field
    $order_comments = $fields['order']['order_comments'];
    
    // Unset 'order comments' field
    unset( $fields['order']['order_comments'] );

    // Add 'delivery time' field
    $fields['order']['delivery_time'] = array(
        'label'        => __( 'Delivery time', 'woocommerce' ),
        'required'     => true,
        'type'         => 'text',
        'class'        => array( 'form-row-wide' ),
    );
    
    // Add 'order comments' field
    $fields['order']['order_comments'] = $order_comments;

    return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'filter_woocommerce_checkout_fields', 10, 1 );

OR use the woocommerce_before_order_notes action hook

function action_woocommerce_before_order_notes( $checkout ) {       
    // Add field
    woocommerce_form_field( 'delivery_time', array(
        'type'          => 'text',
        'class'         => array( 'form-row form-row-wide' ),
        'label'         => __( 'Delivery time', 'woocommerce' ),
        'required'      => true,
    ), $checkout->get_value( 'delivery_time' ) );
}
add_action( 'woocommerce_before_order_notes', 'action_woocommerce_before_order_notes', 10, 1 );
Ad
source: stackoverflow.com
Ad