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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:39:57