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

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数据覆盖初始最小周数据。

  1. 在导入映射步骤,将唯一标识符设置为{artnum};
  2. 进入导入设置,找到「如果记录已存在」选项,选择「跳过」而非「更新」;
  3. 确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:04:53