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

如何在WooCommerce购物车页获取无变体的自定义属性值?

解决方案

1. 先将自定义属性值保存到购物车项

非变体的自定义属性不会自动同步到购物车项数据中,需要通过钩子将用户在产品页选择的属性值存入购物车项:

add_filter('woocommerce_add_cart_item_data', 'save_custom_attribute_to_cart', 10, 3);
function save_custom_attribute_to_cart($cart_item_data, $product_id, $variation_id) {
    // 替换成你产品页中delivaryDate对应的表单字段name
    if (isset($_POST['delivaryDate']) && !empty($_POST['delivaryDate'])) {
        $cart_item_data['delivaryDate'] = sanitize_text_field($_POST['delivaryDate']);
        // 可选:添加唯一键,确保不同属性值生成独立购物车项
        $cart_item_data['unique_attr_key'] = md5(microtime() . rand());
    }
    return $cart_item_data;
}

2. 在购物车页获取并格式化属性值

遍历购物车时,同时读取产品自带属性和我们保存的自定义属性,拼接成要求的格式:

foreach (WC()->cart->get_cart() as $cart_item) {
    $formatted_attrs = [];
    
    // 处理产品本身的属性(包括无变体的产品属性)
    $product_attrs = $cart_item['data']->get_attributes();
    foreach ($product_attrs as $attr_slug => $attr_obj) {
        $attr_name = wc_attribute_label($attr_slug);
        // 非变体属性取第一个值(如果是多选可调整逻辑)
        $attr_value = $attr_obj->get_options()[0];
        $formatted_attrs[] = "{$attr_name}_{$attr_value}";
    }
    
    // 处理我们保存的delivaryDate属性
    if (isset($cart_item['delivaryDate'])) {
        $formatted_attrs[] = "delivaryDate_{$cart_item['delivaryDate']}";
    }
    
    // 输出最终格式的属性字符串
    echo implode('_', $formatted_attrs) . '<br>';
}

关键说明

  • 确保产品页中delivaryDate的表单字段name与代码中的$_POST['delivaryDate']一致,否则无法捕获用户选择的值。
  • 如果你的delivaryDate是通过WooCommerce后台添加的产品自定义属性(而非前端自定义表单),可以替换成$cart_item['data']->get_meta('delivaryDate')来直接获取,无需第一步的钩子(但需确认属性已设置为“可见”并在产品页显示)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:25:18