Magento 2:寻求可批量关联SKU与商品图片的脚本/扩展
解决方案:Magento 2批量关联SKU目录下的多张图片
刚好帮不少朋友解决过这类Magento 2批量图片关联的问题,给你两个方向的方案,都不用折腾CSV配置,完全匹配你按SKU目录存放图片的需求:
一、现成扩展推荐(操作最简便)
如果你偏好可视化操作、不想碰代码,这两个扩展和你之前用的Magento 1 Nanowebgroup ImageImporter功能非常类似:
Firebear Studio Image Import Extension
这个扩展专门针对批量图片导入场景,完美支持按SKU目录匹配图片:- 安装后在后台进入扩展配置页,设置你的图片根目录(就是存放所有SKU子文件夹的路径)
- 选择要导入的图片格式(比如你需要的
.jpg) - 一键启动导入,它会自动扫描每个SKU文件夹下的所有图片,关联到对应商品,还能批量设置主图、缩略图、图库图的类型,全程不用手动编辑CSV。
Amasty Product Images Import
这款扩展的界面更友好,支持预览图片和商品的匹配情况,适合新手操作:- 配置时指定图片存储的目录规则(
/(SKU)/*.jpg完全符合它的匹配逻辑) - 可以自定义每张图片的用途(主图/缩略图等),也能一键批量设置
- 导入过程有进度提示,还能跳过不存在的SKU,避免报错。
- 配置时指定图片存储的目录规则(
二、自定义PHP脚本(免费灵活)
如果你不想安装第三方扩展,自己写个简单的PHP脚本就能搞定,逻辑很清晰,适合有基础的开发者:
把下面的脚本放在你的Magento 2根目录,修改图片根目录后直接执行即可:
<?php use Magento\Framework\App\Bootstrap; require __DIR__ . '/app/bootstrap.php'; $bootstrap = Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); // 设置为后台区域,避免权限问题 $state = $objectManager->get('Magento\Framework\App\State'); $state->setAreaCode('adminhtml'); // 替换成你的图片根目录(比如你的图片存放在/var/www/html/images/下,每个SKU对应子文件夹) $imageRootDir = '/path/to/your/images/'; // 遍历所有SKU子文件夹 $skuDirectories = glob($imageRootDir . '*', GLOB_ONLYDIR); foreach ($skuDirectories as $skuDir) { $sku = basename($skuDir); try { // 通过SKU加载对应的商品 $product = $objectManager->create('Magento\Catalog\Model\Product')->loadByAttribute('sku', $sku); if (!$product) { echo "⚠️ 未找到SKU为{$sku}的商品,跳过\n"; continue; } // 遍历当前SKU文件夹下的所有jpg图片 $images = glob($skuDir . '/*.jpg'); foreach ($images as $index => $imagePath) { $imageFileName = basename($imagePath); try { // 第一张图片设为主图、缩略图、基础图,后续图片仅加入图库 $imageTypes = $index === 0 ? ['image', 'small_image', 'thumbnail'] : ['gallery']; $product->addImageToMediaGallery($imagePath, $imageTypes, false, false); echo "✅ 已将图片{$imageFileName}关联到SKU: {$sku}\n"; } catch (\Exception $e) { echo "❌ 关联图片{$imageFileName}到{$sku}失败:{$e->getMessage()}\n"; } } // 保存商品 $product->save(); } catch (\Exception $e) { echo "❌ 处理SKU {$sku}时出错:{$e->getMessage()}\n"; } } echo "\n🎉 图片批量关联操作完成!\n"; ?>
脚本注意事项:
- 务必先在测试环境运行,确认没问题再放到生产环境
- 替换
/path/to/your/images/为你实际的图片根目录 - 脚本执行需要足够的文件权限,建议用Magento的运行用户执行(比如
www-data) - 可以根据需求调整
$imageTypes的设置,比如所有图片都只加入图库,或者自定义哪些是主图
内容的提问来源于stack exchange,提问作者Sergio Pera
相关产品推荐
相关产品推荐

