如何在 WooCommerce 中的结帐页面上重新排序其他字段

问题描述

我不知道如何在 WooCommerce 的结帐页面上对附加字段重新排序。

我在 WooCommerce 附加信息部分添加一个额外字段。我想先显示时间字段,然后是它下面的订单注释。

这是我正在使用的代码

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

然而,这并没有达到预期的效果。有人能告诉我我做错了什么吗?

解决方法

如果您想先显示自定义字段,然后再显示订单备注。

您可以使用:

// 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 使用 woocommerce_before_order_notes 动作挂钩

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','required'      => true,),$checkout->get_value( 'delivery_time' ) );
}
add_action( 'woocommerce_before_order_notes','action_woocommerce_before_order_notes',1 );