You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce使用100%折扣券时自定义结账字段不显示问题

解决WooCommerce 0金额订单自定义字段不显示问题

针对你遇到的「使用100%折扣券导致订单金额为£0时,Delivery Partner自定义字段无法在感谢页和邮件中显示」问题,核心原因通常是0金额订单的流程钩子触发逻辑与付费订单不同,或是代码中存在订单金额/支付状态的判断限制了字段显示。以下是分场景的解决方案:

第一步:先排查元数据是否已保存

进入后台订单编辑页,查看该0金额订单的「自定义字段」区域,确认_delivery_partner元数据是否存在:

  • 如果元数据存在:问题出在感谢页/邮件的显示逻辑
  • 如果元数据不存在:问题出在订单元数据的保存逻辑

场景1:元数据已保存但不显示

问题大概率是你的感谢页、邮件代码中添加了订单金额>0的判断,导致0金额订单被过滤。修改以下代码:

调整感谢页显示代码

移除金额判断,只要元数据存在就显示:

add_action( 'woocommerce_thankyou', 'display_delivery_partner_on_thankyou' );
function display_delivery_partner_on_thankyou( $order_id ) {
    $order = wc_get_order( $order_id );
    $delivery_partner = $order->get_meta( '_delivery_partner' );
    
    if ( ! empty( $delivery_partner ) ) {
        echo '<p><strong>Delivery Partner:</strong> ' . esc_html( $delivery_partner ) . '</p>';
    }
}

调整邮件通知显示代码

同样移除金额限制,确保字段出现在邮件中:

add_filter( 'woocommerce_email_order_meta_fields', 'add_delivery_partner_to_email', 10, 3 );
function add_delivery_partner_to_email( $fields, $sent_to_admin, $order ) {
    $delivery_partner = $order->get_meta( '_delivery_partner' );
    
    if ( ! empty( $delivery_partner ) ) {
        $fields['delivery_partner'] = array(
            'label' => __( 'Delivery Partner', 'woocommerce' ),
            'value' => $delivery_partner,
        );
    }
    return $fields;
}

场景2:元数据未保存

0金额订单的创建流程可能跳过了woocommerce_checkout_update_order_meta钩子,改用更早触发的woocommerce_checkout_create_order钩子来保存元数据,确保所有订单场景都能生效:

修改元数据保存逻辑

add_action( 'woocommerce_checkout_create_order', 'save_delivery_partner_to_order', 10, 2 );
function save_delivery_partner_to_order( $order, $data ) {
    // 仅当购物车包含目标产品ID6245时保存字段
    $has_target_product = false;
    foreach ( $order->get_items() as $item ) {
        if ( $item->get_product_id() == 6245 ) {
            $has_target_product = true;
            break;
        }
    }

    if ( $has_target_product && isset( $_POST['delivery_partner'] ) && ! empty( $_POST['delivery_partner'] ) ) {
        $order->update_meta_data( '_delivery_partner', sanitize_text_field( $_POST['delivery_partner'] ) );
    }
}

同时确保结账字段的显示和校验逻辑不依赖订单金额:

// 显示结账字段
add_action( 'woocommerce_before_order_notes', 'add_delivery_partner_checkout_field' );
function add_delivery_partner_checkout_field( $checkout ) {
    $has_target_product = false;
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( $cart_item['product_id'] == 6245 ) {
            $has_target_product = true;
            break;
        }
    }

    if ( $has_target_product ) {
        woocommerce_form_field( 'delivery_partner', array(
            'type'          => 'text',
            'class'         => array('form-row-wide'),
            'label'         => __('Delivery Partner', 'woocommerce'),
            'required'      => true,
        ), $checkout->get_value( 'delivery_partner' ) );
    }
}

// 校验字段必填
add_action( 'woocommerce_checkout_process', 'validate_delivery_partner_field' );
function validate_delivery_partner_field() {
    $has_target_product = false;
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( $cart_item['product_id'] == 6245 ) {
            $has_target_product = true;
            break;
        }
    }

    if ( $has_target_product && empty( $_POST['delivery_partner'] ) ) {
        wc_add_notice( __( 'Please enter the Delivery Partner.', 'woocommerce' ), 'error' );
    }
}

验证测试

  1. 添加产品ID6245到购物车
  2. 应用100%折扣券使订单金额为£0
  3. 完成结账,检查感谢页和邮件是否显示Delivery Partner字段
  4. 后台查看订单元数据是否正常保存

内容的提问来源于stack exchange,提问作者user22722114

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:47:25