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

WooCommerce商品联动增删代码同时启用后失效问题咨询

问题排查与解决方案

问题背景

我搭建了一个非WooCommerce的在线学习站点,商品A(ID67)是该站点的商品,商品B(ID15)是WooCommerce商品,使用WooCommerce购物车完成结账。原本找到两段代码,分别实现:

  • 添加商品ID67时自动添加商品ID15
  • 移除商品ID67时自动移除商品ID15
    但将两段代码放在WPCode Snippet插件的两个独立片段中启用后,添加商品ID67时购物车中只有该商品,不会自动添加ID15。询问是否需要将两段代码合并,或是该方案本身不可行。

原有代码问题分析

  1. 语法错误:第二段代码的jhall_remove_product_from_cart函数未闭合,缺少最后的},这会导致PHP语法错误,进而干扰所有WooCommerce相关钩子的执行,包括第一段代码的功能。
  2. 钩子选择不当:第一段代码使用woocommerce_add_cart_item_data钩子,这个钩子在购物车项数据处理阶段触发,此时直接调用WC()->cart->add_to_cart()可能触发重复逻辑,导致添加商品的操作被打断。

修正方案

无需强制合并成一个片段,但必须修复代码错误并调整钩子逻辑,以下是修正后的代码(合并或分开管理均可,合并更便于维护):

合并后的完整代码

// 添加商品67时自动添加商品15
add_action( 'woocommerce_after_add_to_cart', 'auto_add_product_15_when_67_added' );
function auto_add_product_15_when_67_added() {
    // 获取当前添加的商品ID
    $product_id = isset( $_REQUEST['add-to-cart'] ) ? absint( $_REQUEST['add-to-cart'] ) : 0;
    
    if ( $product_id === 67 ) {
        // 检查商品15是否已在购物车中,避免重复添加
        $found = false;
        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            if ( $cart_item['product_id'] === 15 ) {
                $found = true;
                break;
            }
        }
        if ( !$found ) {
            WC()->cart->add_to_cart( 15 );
        }
    }
}

// 移除商品67时自动移除商品15
add_action( 'woocommerce_remove_cart_item', 'auto_remove_product_15_when_67_removed', 10, 2 );
function auto_remove_product_15_when_67_removed( $item_key, $cart ){
    // 获取被移除的商品ID
    $removed_id = $cart->cart_contents[$item_key]['product_id'];
    
    if( $removed_id === 67 ){
        // 查找商品15的购物车项并移除
        foreach( $cart->get_cart() as $cart_item_key => $cart_item ){
            if( $cart_item['product_id'] === 15 ){
                $cart->remove_cart_item( $cart_item_key );
                break;
            }
        }
    }
}

关键修正点说明

  • 替换woocommerce_add_cart_item_data为woocommerce_after_add_to_cart钩子,确保商品67成功添加到购物车后,再执行添加商品15的操作,避免触发顺序冲突。
  • 增加购物车商品检查逻辑,防止重复添加商品15。
  • 修复第二段代码的语法错误,补充缺失的函数闭合}。
  • 改用遍历购物车的方式查找商品15,比generate_cart_id更可靠,避免因商品属性差异导致无法匹配的问题。

执行建议

  • 可以选择将两段代码合并为一个WPCode片段,便于统一管理和调试;也可以分开为两个片段,但需确保两段代码都无语法错误。
  • 测试前请清空购物车,避免残留商品影响测试结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:48