Alle Bilder einer Webseite in Magento 2 löschen (nur Datenbank)

Für Magento 2 kann folgendes Script verwendet werden um alle Bilder einer Webseite zu löschen.

Dabei werden nur die Einträge aus der Datenbank entfernt, aber keine Bilder auf der Festplatte gelöscht!

 

<?php

use Magento\Framework\App\Bootstrap;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\Product\Gallery\Processor as GalleryProcessor;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Store\Model\WebsiteRepository;

require __DIR__ . '/app/bootstrap.php';

$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();

$state = $objectManager->get(\Magento\Framework\App\State::class);
$state->setAreaCode('adminhtml');

/**
* Anpassen:
* Website-Code aus Stores > All Stores > Website Code
*/
$websiteCode = 'goebel';

$websiteRepository = $objectManager->get(WebsiteRepository::class);
$website = $websiteRepository->get($websiteCode);
$websiteId = (int)$website->getId();

$productCollectionFactory = $objectManager->get(CollectionFactory::class);
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
$galleryProcessor = $objectManager->get(GalleryProcessor::class);

$collection = $productCollectionFactory->create();
$collection->addWebsiteFilter($websiteId);
$collection->addAttributeToSelect(['sku', 'image', 'small_image', 'thumbnail', 'media_gallery']);

$count = 0;
$skipped = 0;

foreach ($collection as $product) {
$websiteIds = $product->getWebsiteIds();

/**
* Wichtig:
* Produkte überspringen, die auch anderen Websites zugeordnet sind.
*/
if (count($websiteIds) > 1) {
echo "SKIP {$product->getSku()} - Produkt ist mehreren Websites zugeordnet\n";
$skipped++;
continue;
}

$product = $productRepository->getById((int)$product->getId(), true, null, true);

$mediaGalleryImages = $product->getMediaGalleryImages();

if ($mediaGalleryImages) {
foreach ($mediaGalleryImages as $image) {
$galleryProcessor->removeImage($product, $image->getFile());
echo "Remove image {$image->getFile()} from {$product->getSku()}\n";
}
}

$product->setImage('no_selection');
$product->setSmallImage('no_selection');
$product->setThumbnail('no_selection');

$productRepository->save($product);

$count++;
}

echo "Fertig. Bearbeitet: {$count}, übersprungen: {$skipped}\n";

Schreibe einen Kommentar

Menü schließen