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

WooCommerce账单结账字段添加动态填充产品名称的自定义字段需求

WooCommerce结账账单区域添加动态产品名称自定义字段方案

实现思路

通过WooCommerce提供的钩子,在结账账单区域插入自定义字段,动态读取当前购物车内的产品名称并填充到字段中,同时将该字段值保存到订单元数据,方便后续在后台和前端订单详情中查看,实现用户与产品的关联。

代码实现

以下是完整的PHP代码方案,可添加到主题的functions.php文件或自定义插件中:

1. 添加自定义字段到结账账单区域

// 在结账账单区域添加关联产品自定义字段
add_action( 'woocommerce_billing_fields', 'add_product_association_billing_field' );
function add_product_association_billing_field( $fields ) {
    // 收集购物车中所有产品名称
    $product_names = [];
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $product_names[] = $cart_item['data']->get_name();
    }
    // 拼接为逗号分隔的字符串
    $product_names_str = implode( ', ', $product_names );

    $fields['billing_product_association'] = [
        'label'             => '关联产品',
        'required'          => false, // 按需设置是否必填
        'class'             => ['form-row-wide'],
        'clear'             => true,
        'default'           => $product_names_str,
        'type'              => 'text',
        'custom_attributes' => [
            'readonly' => 'readonly' // 设为只读避免用户修改,可按需移除
        ]
    ];

    return $fields;
}

2. 保存字段值到订单元数据

// 将自定义字段值保存到订单
add_action( 'woocommerce_checkout_update_order_meta', 'save_product_association_to_order' );
function save_product_association_to_order( $order_id ) {
    if ( isset( $_POST['billing_product_association'] ) ) {
        update_post_meta( $order_id, '_billing_product_association', sanitize_text_field( $_POST['billing_product_association'] ) );
    }
}

3. 在后台订单页面显示字段

// 后台订单编辑页显示关联产品字段
add_action( 'woocommerce_admin_order_data_after_billing_address', 'show_product_association_in_admin' );
function show_product_association_in_admin( $order ) {
    $product_association = get_post_meta( $order->get_id(), '_billing_product_association', true );
    if ( ! empty( $product_association ) ) {
        echo '<p><strong>' . esc_html__( '关联产品', 'woocommerce' ) . ':</strong> ' . esc_html( $product_association ) . '</p>';
    }
}

4. 在前端订单详情页显示字段

// 前端订单详情页显示关联产品字段
add_action( 'woocommerce_order_details_after_order_table', 'show_product_association_in_frontend' );
function show_product_association_in_frontend( $order ) {
    $product_association = get_post_meta( $order->get_id(), '_billing_product_association', true );
    if ( ! empty( $product_association ) ) {
        echo '<div class="product-association-block">
                <h3>' . esc_html__( '关联产品', 'woocommerce' ) . '</h3>
                <p>' . esc_html( $product_association ) . '</p>
              </div>';
    }
}

注意事项

  • 代码需添加到主题functions.php或自定义插件中,不要直接修改WooCommerce核心文件,避免版本更新导致代码丢失。
  • 若购物车含多个产品,代码默认用逗号分隔名称,可修改implode的分隔符调整显示格式(如'<br>'实现换行)。
  • 如需允许用户编辑产品名称,可移除custom_attributes中的readonly属性。
  • 确保代码在WooCommerce环境下运行,WC()->cart全局对象仅在结账等购物车相关页面有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:31:12