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

通过WooCommerce REST API批量导入产品失败的解决方案咨询

问题解决方案

1. 增加错误捕获与重试机制

当前代码未处理请求失败的情况,一旦某个批次请求出错就会直接中断流程。必须添加异常捕获,记录错误详情并增加重试逻辑,避免单次失败导致整体中断:

$createChunks = array_chunk($creates, 90);
foreach ($createChunks as $chunkIndex => $chunk) {
    try {
        $response = $this->woocommerce->post('products/batch', ['create' => $chunk]);
        error_log("批次 {$chunkIndex} 导入成功: " . json_encode($response));
    } catch (Exception $e) {
        error_log("批次 {$chunkIndex} 初始请求失败: " . $e->getMessage());
        // 最多重试3次,每次间隔5秒
        $retryCount = 0;
        while ($retryCount < 3) {
            sleep(5);
            try {
                $response = $this->woocommerce->post('products/batch', ['create' => $chunk]);
                error_log("批次 {$chunkIndex} 重试第" . ($retryCount+1) . "次成功");
                break;
            } catch (Exception $retryE) {
                $retryCount++;
                error_log("批次 {$chunkIndex} 重试第{$retryCount}次失败: " . $retryE->getMessage());
            }
        }
    }
    sleep(2);
}

2. 缩小批量处理的产品数量

90个产品的批次可能超出WooCommerce API的请求体大小限制,建议将批次大小调整为30-50个产品。每个产品的字段数量、内容长度会影响请求体积,过大的POST请求容易触发服务器500错误或超时。

3. 优化WooCommerce客户端超时设置

给WooCommerce API客户端设置更长的超时时间,避免因单批次处理耗时过长被中断:

$this->woocommerce = new Automattic\WooCommerce\Client(
    WC()->api_request_url(''),
    'consumer_key',
    'consumer_secret',
    [
        'version' => 'wc/v3',
        'timeout' => 60, // 将超时时间设置为60秒
    ]
);

4. 服务器配置与日志检查

  • 确认Hetzner主机的php.ini参数:post_max_size和upload_max_filesize需足够大(建议设置为64M以上),避免因请求体过大被拦截;同时验证max_execution_time、memory_limit的设置是否实际生效。
  • 查看服务器错误日志(Apache的error.log或Nginx的error.log),500错误的具体原因(如PHP致命错误、数据库连接超时)会记录在这里,是排查核心问题的关键。
  • 检查服务器防火墙、WordPress安全插件(如Wordfence)是否拦截了频繁的API请求,导致流程中途中断。

5. 降低导入过程的资源消耗

  • 导入前临时禁用WooCommerce的自动库存同步、订单邮件通知等非必要功能,减少数据库负载。
  • 暂时移除产品相关的钩子(如woocommerce_new_product),避免额外的业务逻辑拖慢导入速度,导入完成后再恢复。

6. 拆分任务为 cron 分批执行

避免长时间运行的脚本被服务器强制终止,将导入任务拆分为多个小批次,用WordPress cron 调度执行:

// 保存当前处理到的批次索引
update_option('product_import_current_chunk', $chunkIndex + 1);
// 1分钟后继续执行剩余批次
wp_schedule_single_event(time() + 60, 'continue_product_import');

然后在continue_product_import钩子回调中,读取保存的批次索引,继续处理剩余的产品批次。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:12:22