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

如何在使用WP ALL EXPORT PRO导出WooCommerce订单XML时排除空标签

如何在使用WP ALL EXPORT PRO导出WooCommerce订单XML时排除空标签

嘿,我完全懂你现在的困扰——不同产品的属性和选项值五花八门,导出的XML里一堆空标签不仅看着乱,还可能给你的履约合作伙伴带来不必要的麻烦。针对你目前用的这段WP ALL EXPORT PRO的PHP代码,咱们可以通过先检查字段值是否为空,再决定是否生成对应XML标签的方式,彻底解决空标签问题。

核心思路

不要一股脑直接拼接所有标签,而是对每个字段/选项做个简单判断:只有当字段值不为空时,才把对应的XML标签加入输出内容里。这样就能自动过滤掉那些没有实际内容的空标签了。

修改后的完整代码

<?php
function my_get_order_items( $order_id ) {
    $order = wc_get_order( absint($order_id) ); // 获取WC_Order对象

    if ( ! is_a($order, 'WC_Order') ) {
        return false; // 如果不是有效订单就退出
    }
    $order_details = ""; // 初始化存储订单详情的字符串

    // 遍历订单商品
    foreach ( $order->get_items() as $item ) {
        // 过滤指定商品类型
        if ( ! ( strpos($item->get_name(), 'KERAMIKTASSE') !== false
        || strpos($item->get_name(), 'BAUMWOLLTASCHE') !== false
        || strpos($item->get_name(), 'SWEATSHIRT') !== false
        || strpos($item->get_name(), 'HOODIE') !== false
        || strpos($item->get_name(), 'T-SHIRT') !== false ) ) { 
            continue; 
        }
        $product    = $item->get_product(); // 获取商品对象
        $product_id = $item->get_product_id(); // 获取商品ID

        $order_details .= "**LT**item**GT**";
        $order_details .= "**LT**ID**GT**" . $product->get_sku() . "**LT**/ID**GT**";
        $order_details .= "**LT**produktname**GT**" . $item->get_name() . "**LT**/produktname**GT**";
        $order_details .= "**LT**amount**GT**" . $item->get_quantity() . "**LT**/amount**GT**";

        // 处理普通字段:非空才生成标签
        $upload = maybe_serialize( get_field( 'upload', $product_id ) );
        if ( !empty($upload) ) {
            $order_details .= "**LT**upload**GT**" . $upload . "**LT**/upload**GT**";
        }

        $size = maybe_serialize( get_field( 'size', $product_id ) );
        if ( !empty($size) ) {
            $order_details .= "**LT**size**GT**" . $size . "**LT**/size**GT**";
        }

        $groesse = $product->get_attribute('pa_groesse');
        if ( !empty($groesse) ) {
            $order_details .= "**LT**groesse**GT**" . $groesse . "**LT**/groesse**GT**";
        }

        $material = maybe_serialize( get_field( 'material', $product_id ) );
        if ( !empty($material) ) {
            $order_details .= "**LT**material**GT**" . $material . "**LT**/material**GT**";
        }

        $print = maybe_serialize( get_field( 'print', $product_id ) );
        if ( !empty($print) ) {
            $order_details .= "**LT**print**GT**" . $print . "**LT**/print**GT**";
        }

        $variante = maybe_serialize( get_field( 'variante', $product_id ) );
        if ( !empty($variante) ) {
            $order_details .= "**LT**variante**GT**" . $variante . "**LT**/variante**GT**";
        }

        $category = maybe_serialize( get_field( 'category', $product_id ) );
        if ( !empty($category) ) {
            $order_details .= "**LT**category**GT**" . $category . "**LT**/category**GT**";
        }

        // 处理Options部分:非空的Option才生成标签
        $order_details .= "**LT**Options**GT**";

        // 处理第一个Option(groupid_115 & value_115)
        $groupid_115 = maybe_serialize( get_field( 'groupid_115', $product_id ) );
        $value_115 = maybe_serialize( get_field( 'value_115', $product_id ) );
        if ( !empty($groupid_115) || !empty($value_115) ) {
            $order_details .= "**LT**Option**GT****LT**ID**GT**" . $groupid_115 . "**LT**/ID**GT****LT**Value**GT**" . $value_115 . "**LT**/Value**GT****LT**/Option**GT**";
        }

        // 处理第二个Option(groupid_117 & value_117)
        $groupid_117 = maybe_serialize( get_field( 'groupid_117', $product_id ) );
        $value_117 = maybe_serialize( get_field( 'value_117', $product_id ) );
        if ( !empty($groupid_117) || !empty($value_117) ) {
            $order_details .= "**LT**Option**GT****LT**ID**GT**" . $groupid_117 . "**LT**/ID**GT****LT**Value**GT**" . $value_117 . "**LT**/Value**GT****LT**/Option**GT**";
        }

        // 处理第三个Option(groupid_118 & value_118)
        $groupid_118 = maybe_serialize( get_field( 'groupid_118', $product_id ) );
        $value_118 = maybe_serialize( get_field( 'value_118', $product_id ) );
        if ( !empty($groupid_118) || !empty($value_118) ) {
            $order_details .= "**LT**Option**GT****LT**ID**GT**" . $groupid_118 . "**LT**/ID**GT****LT**Value**GT**" . $value_118 . "**LT**/Value**GT****LT**/Option**GT**";
        }

        $order_details .= "**LT**/Options**GT**";
        $order_details .= "**LT**/item**GT**";
    }
    return $order_details;
}
?>

关键修改说明

  1. 普通字段处理:比如upload、size这些字段,先把值存到变量里,用!empty()判断是否有内容,只有非空时才拼接对应的XML标签。
  2. Options标签处理:对每个Option的groupid和value分别取值,只要其中一个有内容,就生成这个Option标签;如果两个都为空,就跳过这个Option,不会生成空标签。
  3. 这样修改后,导出的XML里就只会保留有实际内容的标签,完全符合你想要的效果。

备注:内容来源于stack exchange,提问作者Orko22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 08:58:01