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

Elementor Pro表单提交后无法添加WooCommerce订阅商品至购物车并跳转结账

问题诊断与修复方案

核心问题分析

你的代码无法触发预期动作,主要存在以下几个关键问题:

  • 钩子参数不匹配:elementor_pro/forms/new_record钩子实际传递2个参数,但你的函数只声明了1个,导致函数无法正确绑定触发。
  • 表单名称获取逻辑错误:get_form_settings('Cosmetic_Crate')是错误的调用方式,应该传入form_name参数来获取表单的名称配置。
  • 缺少字段与产品映射的存在性校验:如果用户未选择订阅选项,或者选项不在映射列表中,会直接报错中断执行。
  • WooCommerce购物车未确保初始化:部分场景下WC()->cart可能未正确加载,导致添加商品失败。

修正后的代码

// Form Checkout Process CC.
function handle_custom_subscription_form($record, $handler) {
    // 获取表单名称(对应Elementor表单设置里的"表单名称")
    $form_name = $record->get_form_settings('form_name');
    
    // 验证是否为目标表单
    if ('Cosmetic_Crate' !== $form_name) {
        return;
    }
    
    $raw_fields = $record->get('fields');
    $fields = [];
    foreach ($raw_fields as $id => $field) {
        $fields[$id] = $field['value'];
    }
    
    // 检查订阅选项字段是否存在且有值
    if (!isset($fields['cc_price']) || empty($fields['cc_price'])) {
        wc_add_notice('请选择订阅层级', 'error');
        return;
    }
    
    $selected_subscription = $fields['cc_price'];
    
    // 订阅选项与产品ID映射
    $product_mapping = [
        'cc_price_30' => 1412,
        'cc_price_60' => 1421,
        'cc_price_90' => 1422,
        'cc_price_150' => 1423,
    ];
    
    // 检查选中的选项是否在映射列表中
    if (!isset($product_mapping[$selected_subscription])) {
        wc_add_notice('无效的订阅选项', 'error');
        return;
    }
    
    $product_id = $product_mapping[$selected_subscription];
    
    // 确保WooCommerce购物车初始化
    if (WC()->cart) {
        // 清空购物车(可选,避免之前的商品影响)
        WC()->cart->empty_cart();
        // 添加订阅商品到购物车
        WC()->cart->add_to_cart($product_id);
        
        // 跳转到结账页面
        wp_safe_redirect(wc_get_checkout_url());
        exit;
    } else {
        wc_add_notice('购物车初始化失败', 'error');
    }
}

add_action('elementor_pro/forms/new_record', 'handle_custom_subscription_form', 10, 2);

额外验证步骤

  • 确认Elementor表单的表单名称确实设置为Cosmetic_Crate(在表单设置的"常规"标签下)。
  • 确认订阅选择框的字段ID是cc_price(在字段设置的"高级"标签下查看"字段ID")。
  • 验证映射中的产品ID(1412、1421等)确实是后台存在的订阅商品ID。
  • 测试前清空浏览器缓存,避免前端缓存导致的表单提交异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:43:26