WP All Import重复产品ID问题:如何设置跨周促销?
WP ALL-IMPORT 跨周促销导入解决方案
方法1:预处理XML,仅保留每个商品的最小周数据
通过自定义PHP函数过滤XML,只保留每个artnum(商品ID)对应最小week的<ROW>节点,从源头上避免重复导入覆盖。
实现代码
function filter_xml_to_min_week($xml_content) { $dom = new DOMDocument(); $dom->loadXML($xml_content); $rows = $dom->getElementsByTagName('ROW'); // 收集每个商品的最小周数 $product_min_week = []; foreach ($rows as $row) { $artnum = $row->getAttribute('artnum'); $current_week = (int)$row->getAttribute('week'); if (!isset($product_min_week[$artnum]) || $current_week < $product_min_week[$artnum]) { $product_min_week[$artnum] = $current_week; } } // 删除非最小周的节点 $nodes_to_remove = []; foreach ($rows as $row) { $artnum = $row->getAttribute('artnum'); $current_week = (int)$row->getAttribute('week'); if ($current_week !== $product_min_week[$artnum]) { $nodes_to_remove[] = $row; } } foreach ($nodes_to_remove as $node) { $node->parentNode->removeChild($node); } return $dom->saveXML(); }
使用方式
在WP ALL-IMPORT的导入设置中找到「XML/CSV预处理」,添加上述函数,原始XML会先被过滤,再进入导入流程。
方法2:设置唯一标识符,跳过已存在的商品
利用WP ALL-IMPORT的重复数据处理规则,避免后续同ID数据覆盖初始最小周数据。
- 在导入映射步骤,将唯一标识符设置为
{artnum}; - 进入导入设置,找到「如果记录已存在」选项,选择「跳过」而非「更新」;
- 确保XML中最小周的
<ROW>节点排在同ID数据的最前面(若顺序相反,需先对XML按week升序排序)。
方法3:生成跨周促销周期(保留所有周数据)
若需要基于所有周数据生成完整的促销起止日期,可通过自定义函数计算每个商品的最小/最大周,直接生成跨周区间。
实现代码
function get_promo_date_range($current_artnum, $full_xml) { $dom = new DOMDocument(); $dom->loadXML($full_xml); $rows = $dom->getElementsByTagName('ROW'); $product_weeks = []; $year = date('Y'); foreach ($rows as $row) { if ($row->getAttribute('artnum') === $current_artnum) { $product_weeks[] = (int)$row->getAttribute('week'); // 优先从XML的jaar属性取年份,替代当前年份 $year = $row->getAttribute('jaar'); } } if (empty($product_weeks)) return ''; $min_week = min($product_weeks); $max_week = max($product_weeks); // 计算最小周起始日期 $start_date = (new DateTime())->setISODate($year, $min_week)->format('Y-m-d'); // 计算最大周结束日期(ISO周结束为周日,加6天) $end_date = (new DateTime())->setISODate($year, $max_week)->modify('+6 days')->format('Y-m-d'); return "{$start_date} 至 {$end_date}"; }
使用方式
在导入时,将商品的促销日期字段映射为调用该函数,传入当前商品ID{artnum}和完整XML内容(需在预处理时保留所有节点)。
内容的提问来源于stack exchange,提问作者tnebrekooy
相关产品推荐
相关产品推荐

