Respuestas:
La forma más rápida de hacerlo es ejecutar esta consulta directamente.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Todo debería caer en cascada muy bien. los valores de los atributos se eliminarán, las relaciones de categoría se eliminarán, las ventas adicionales, las ventas cruzadas y las relacionadas, etc.
[EDITAR]
Hay un problema con esto. Gracias a STW por detectar esto. Las revisiones y calificaciones permanecerán huérfanas porque no hay una clave externa para la tabla de productos para ellos.
->delete()
pero esquivará cualquier código que escuche eventos. En existencia, Magento parece que las reseñas y clasificaciones quedarán huérfanas (no se eliminarán cuando su producto asociado lo esté).
catalog_product_entity_*
tablas tienen un FK en el entity_id
campo al catalog_product_entity.entity_id
campo. Deben caer en cascada muy bien.
Todo el debido respeto a Marius, pero no interactúe con la base de datos directamente si es evitable. Tal vez las tablas relacionadas se actualicen automáticamente, si su lanzamiento de Magento y todas sus extensiones están libres de errores en todos los lugares correctos. Pero si no lo son, ese tipo de cosas pueden destruir su sitio.
En su lugar, puede usar la característica de importación CSV de Magento.
Simplemente enumere sus SKU en un archivo, simple como:
sku
ABC1
ABC2
ABC3
... etc. Luego guárdelo como un archivo CSV.
Luego, en Sistema> Importar / Exportar> Importar, seleccione Tipo de entidad: Productos e Importar comportamiento: Eliminar entidades e importe este archivo. ¡Y eso es!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Puedes hacerlo programáticamente. Cree un skustodelete.csv que enumere todos los skus que se eliminarán y después de eso, aquí está el código para continuar
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";
La forma sin código
En la sección de administración debajo Manage Products
encontrará una grilla con todos sus productos. Hay una columna llamada SKU
. Aquí puede filtrar sus productos según el valor.
Luego, una vez que haya filtrado por SKU, puede usar las casillas de verificación en el lado izquierdo para seleccionar todos los elementos que desea eliminar.
Observe select all
que seleccionará todos los elementos en la cuadrícula completa y select visible
que solo seleccionará elementos en la página actual de la cuadrícula.
Una vez que haya seleccionado los elementos que desea, puede usar el botón de acción masiva en la parte superior derecha de la cuadrícula y seleccionar la opción Eliminar.
Esto le pedirá que se asegure de que desea eliminar estos elementos. Después de seleccionar sí a esta ventana emergente, procederá a eliminar sus elementos. Dependiendo de la configuración de su índice, es posible que deba volver a indexar después de este proceso.
Kevin S, puede eliminar el producto por archivo csv. Solo sigue el paso ondulante
Paso 1 :
Cree un archivo csv y pegue los skus que desea eliminar del sistema. Dé el nombre del archivo como skus.csv
Paso 2 :
Crea y reemplaza un archivo php en tu directorio raíz. Luego pasa el siguiente código
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: Antes de ejecutar este código, le recomendé que debe obtener la copia de seguridad. Espero que sea de ayuda.
Porque listar tablas
son claves foráneas de catalog_product_entity.
Entonces, cuando elimine un registro en catalog_product_entity, también se eliminarán algunos registros de las tablas anteriores.
El código (implementar la respuesta de Marius) elimina todos los productos que tienen 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);