如何在WooCommerce订单通知中隐藏指定商品
解决WooCommerce订单通知邮件中隐藏指定商品的问题
你的修改代码报错,核心原因是订单项($order_item)是WC_Order_Item_Product对象,不是数组,不能像购物车项那样用$order_item['product_id']的方式访问属性;同时你还搞错了woocommerce_order_item_visible过滤器的参数对应关系,第三个参数是$order对象而非$order_item_key。
下面是修正后的可用代码:
function hide_product_from_order_notifications( $visible, $order_item, $order ) { // 指定要隐藏的商品ID $targeted_ids = array( 5500, 5499, 5498 ); // 仅处理商品类型的订单项,跳过运费、优惠券等其他类型 if ( ! $order_item instanceof WC_Order_Item_Product ) { return $visible; } // 通过对象方法获取商品ID和变体ID $product_id = $order_item->get_product_id(); $variation_id = $order_item->get_variation_id(); // 检查当前商品是否在隐藏列表中 if ( in_array( $product_id, $targeted_ids ) || in_array( $variation_id, $targeted_ids ) ) { $visible = false; } return $visible; } add_filter( 'woocommerce_order_item_visible', 'hide_product_from_order_notifications', 10, 3 );
关键修正说明:
- 修正过滤器参数:
woocommerce_order_item_visible的三个参数依次是$visible(可见性状态)、$order_item(订单项对象)、$order(订单对象),原代码参数对应错误 - 改用对象方法获取ID:订单项是类实例,必须通过
get_product_id()和get_variation_id()方法访问属性,不能用数组下标 - 增加类型校验:确保只处理商品类订单项,避免干扰其他类型的订单条目
- 简化判断逻辑:用
in_array直接检查ID是否在目标列表中,代码更直观
这段代码会在订单通知邮件、后台订单详情页等所有调用woocommerce_order_item_visible过滤器的场景中,隐藏指定ID的商品。
内容的提问来源于stack exchange,提问作者Timofey Golubtsov
相关产品推荐
相关产品推荐

