根据产品ID移除WooCommerce购物车数量选择器的代码报错排查
问题排查
你的合并代码触发致命错误的核心原因:
woocommerce_cart_item_quantity过滤器默认仅向回调函数传递3个参数:数量标记输出内容、购物车项唯一key、购物车项数据数组。- 你在自定义函数中额外声明了第4个参数
$product,既没有在add_filter注册时修改接收参数数量,该钩子本身也不会传递产品对象作为第4个入参,当代码尝试调用$product->is_type()时,$product为null,直接触发PHP致命错误。
实现代码
将以下代码添加到主题functions.php文件或自定义代码片段插件中即可实现需求:仅指定ID的产品(含其下所有变体)在购物车页隐藏数量选择器、保留数量文本展示,其余产品的数量选择器功能不受影响。
add_filter( 'woocommerce_cart_item_quantity', 'hide_target_product_cart_qty_selector', 10, 3 ); function hide_target_product_cart_qty_selector( $product_quantity, $cart_item_key, $cart_item ){ // 在此处数组内填写需要隐藏数量选择器的产品ID $target_ids = array(117295, 117343, 99999999); // 从购物车项数据中直接获取产品对象,兼容普通产品、可变产品变体 $product = $cart_item['data']; $match_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id(); if( is_cart() && in_array($match_id, $target_ids) ){ // 输出纯数量文本+隐藏输入域,保证购物车更新、结算流程正常识别数量 $product_quantity = sprintf( '%2$s <input type="hidden" name="cart[%1$s][qty]" value="%2$s" />', $cart_item_key, $cart_item['quantity'] ); } return $product_quantity; }
注意事项
- 无需额外挂载
woocommerce_quantity_input_args过滤器,单钩子实现逻辑更简洁,不会和WooCommerce原生逻辑冲突 - 自动兼容可变产品:购物车中如果是指定ID产品下的变体,会自动匹配规则,不需要单独录入变体ID
- 隐藏输入域会保留当前商品的数量值,不会破坏购物车更新、提交订单的正常流程
内容的提问来源于stack exchange,提问作者Rafael S.
相关产品推荐
相关产品推荐

