You need to enable JavaScript to run this app. WooCommerce热敏打印变量商品小票显示HTML标签及过滤后无商品问题求助
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce热敏打印变量商品小票显示HTML标签及过滤后无商品问题求助

现有代码问题排查
  • 赋值逻辑完全错误:原代码直接将WC_Order对象传入strip_tags后,用转换后的字符串覆盖了$order->item属性。原本该属性是打印插件用来存储结构化订单项数据的数组,被替换后自然会导致商品条目完全不显示。
  • 处理范围错位:本意是过滤可变商品订单项名称里的HTML标签,但实际操作是对整个订单对象做标签过滤,完全没有作用到需要处理的字段上。
  • 可变商品打印出HTML的原因:WooCommerce默认会给可变商品的订单项名称附带属性说明的HTML标签(比如<small>、<br>等),简单商品名称不带HTML所以显示正常。
可正常运行的实现方案

核心逻辑是先提取所有结构化订单项,仅对订单项的名称字段做HTML过滤,再将处理后的订单项重新赋值给打印插件的item属性,保证商品条目结构完整。
以下是可直接使用的代码片段:

add_filter( 'before_send_order_to_iconnect', 'printer_tags_strip', 10, 1 );
function printer_tags_strip( $object ) {
    // 实例化当前订单对象
    $wc_order = wc_get_order( $object->order_id );
    if ( ! $wc_order ) {
        return $object;
    }

    $clean_items = [];
    // 遍历所有订单项逐个处理
    foreach ( $wc_order->get_items() as $item ) {
        // 获取原始订单项名称(可变商品此处会附带HTML标签)
        $raw_name = $item->get_name();
        // 过滤所有HTML标签,仅保留<br>用于转换为打印换行
        $name_no_html = strip_tags( $raw_name, '<br>' );
        // 将HTML换行替换为热敏打印支持的普通换行符
        $final_name = str_replace( [ '<br>', '<br/>', '<br />' ], "\n", $name_no_html );

        // 组装为打印插件可识别的订单项结构
        // 若你的插件有自定义字段要求,可在此调整数组键名
        $clean_items[] = [
            'name' => $final_name,
            'quantity' => $item->get_quantity(),
            'total' => $item->get_total(),
            // 可按需补充SKU、单价、小计等其他需要的字段
        ];
    }

    // 替换打印插件的订单项属性为处理后的干净数据
    $object->item = $clean_items;
    return $object;
}
适配调整说明
  • 如果你的打印插件要求订单项的名称字段键名不是name,可根据插件文档调整$clean_items里的数组键名,避免出现字段不匹配的问题。
  • 如果还有其他带HTML的字段(比如自定义商品选项、订单备注等),可参照上述逻辑对对应字段单独做strip_tags处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 14:36:04