Respostas:
A maneira mais rápida de fazer isso é executar essa consulta diretamente.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Tudo deve cascata bem. os valores dos atributos serão excluídos, as relações de categoria serão excluídas, upsells, crosssells e afins.
[EDIT]
Há um problema nisso. Obrigado à STW por detectar isso. As revisões e classificações permanecerão órfãs porque não há chave estrangeira na tabela de produtos para elas.
->delete()
mas evita qualquer escuta de código de eventos. Em estoque, Magento, parece que as avaliações e classificações ficarão órfãs (elas não serão excluídas quando o produto associado for).
catalog_product_entity_*
tabelas têm um FK no entity_id
campo a catalog_product_entity.entity_id
campo. Eles devem cascatear bem.
Com o devido respeito ao Marius, mas não interaja diretamente com o banco de dados, se for evitável. Talvez as tabelas relacionadas sejam atualizadas automaticamente, se o seu lançamento do Magento e todas as suas extensões estiverem livres de bugs nos lugares certos. Mas, se não estiverem, esse tipo de coisa pode destruir seu site.
Em vez disso, você pode usar o próprio recurso de importação de CSV do Magento.
Basta listar seus SKUs em um arquivo, simples como:
sku
ABC1
ABC2
ABC3
... etc Em seguida, salve como um arquivo CSV.
Em Sistema> Importar / Exportar> Importar, selecione Tipo de Entidade: Produtos e Comportamento de Importação: Excluir Entidades e importe esse arquivo. E é isso!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Você pode fazer isso programaticamente. Crie um skustodelete.csv listando todos os skus a serem excluídos e, depois disso, aqui está o código para prosseguir
require_once 'app/Mage.php';
Mage :: app("default")->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);
$skuAll = array();
$file_handle = fopen("skustodelete.csv", "r");
$catalog = Mage::getModel('catalog/product');
while (!feof($file_handle)) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
$product = $catalog->loadByAttribute('sku', $allSku);
try {
$product->delete();
echo "Product with ID: " . $product->getId() . " Deleted Successfully". PHP_EOL;
} catch (Exception $e) {
echo "Product with ID: " . $product->getId() . "cannot be deleted" . PHP_EOL;
}
}
echo "Finish Delete";
A maneira sem código
Na seção de administração, Manage Products
encontrará uma grade com todos os seus produtos. Há uma coluna chamada SKU
. Aqui você pode filtrar seus produtos com base no valor.
Depois de filtrar por SKU, você pode usar as caixas de seleção no lado esquerdo para selecionar todos os itens que deseja excluir.
Observe o select all
que selecionará todos os itens na grade completa e o select visible
que selecionará apenas itens na página atual da grade.
Depois de selecionar os itens desejados, você pode usar o botão de ação em massa no lado superior direito da grade e selecionar a opção de exclusão.
Isso solicitará que você tenha certeza de que deseja excluir esses itens. Após selecionar sim neste pop-up, ele excluirá seus itens. Dependendo das configurações do seu índice, pode ser necessário executar um re-índice após esse processo.
Kevin S, você pode excluir o produto por arquivo csv. Basta seguir a etapa da vaga
Passo 1 :
Crie um arquivo csv e passe os skus que deseja excluir do sistema. Dê o nome do arquivo como skus.csv
Passo 2 :
Crie e substitua um arquivo php em seu diretório raiz. Depois do código a seguir
require_once '../app/Mage.php';
Mage :: app("default") -> setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$skuAll =array();
$file_handle = fopen("skus.csv", "r");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
}
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter(
'sku', array('in' => $allSku)
)
->load();
if(is_array($products))
{
foreach ($products as $key => $pId)
{
try
{
$product = Mage::getModel('catalog/product')->load($pId)->delete();
echo "successfully deleted product with ID: ". $pId ."<br />";
}
catch (Exception $e)
{
echo "Could not delete product with ID: ". $pId ."<br />";
}
}
}
Nota: Eu recomendei a você antes de executar este código, você deve obter o backup. Espero que seja de ajuda.
Porque tabelas de lista
são chaves estrangeiras de catalog_product_entity.
Portanto, ao excluir um registro em catalog_product_entity, alguns registros das tabelas acima também serão excluídos.
O código (implemente a resposta de Marius) exclui todos os produtos que possuem entity_id <= 18069:
$adapter = $setup->getConnection("catalog_write");
$where = array(
'entity_id <= ?' => '18069'
);
$tableCatalogProduct = Mage::getModel("catalog/product")->getResource()->getEntityTable();
$adapter->delete($tableCatalogProduct, $where);
$tableRating = Mage::getModel("rating/rating")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);
$tableRating = Mage::getModel("review/review")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);