如何在使用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; } ?>
关键修改说明
- 普通字段处理:比如
upload、size这些字段,先把值存到变量里,用!empty()判断是否有内容,只有非空时才拼接对应的XML标签。 - Options标签处理:对每个Option的
groupid和value分别取值,只要其中一个有内容,就生成这个Option标签;如果两个都为空,就跳过这个Option,不会生成空标签。 - 这样修改后,导出的XML里就只会保留有实际内容的标签,完全符合你想要的效果。
备注:内容来源于stack exchange,提问作者Orko22
相关产品推荐
相关产品推荐

