Saltar al contenido

¿Cómo eliminar un producto en Magento-2 mediante programación?

Después de mirar en diversos repositorios y foros de internet finalmente dimos con la resolución que te mostraremos ahora.

Solución:

Si intenta eliminar el producto de la interfaz, debe asignar un área para eso.

Agregue el siguiente código a su clase.

public function __construct(
    ........
    MagentoCatalogModelProductRepository $productRepository,
    MagentoFrameworkRegistry $registry
) 
    ......
    $this->productRepository = $productRepository;
    $this->registry = $registry;

El siguiente código es para eliminar el producto.

$this->registry->register('isSecureArea', true);
// using sku
$this->productRepository->deleteById('Z62676');

// using product id
$product = $this->productRepository->getById(1);
$this->productRepository->delete($product);

Primero, le sugiero que intente evitar usar ObjectManager directamente

En segundo lugar, creo que deberías utilizar el MagentoCatalogApiProductRepositoryInterface contrato de servicio para eliminar un producto:

protected $_productRepositoryInterface;

public function __construct(
     ...
     MagentoCatalogApiProductRepositoryInterface $productRepositoryInterface, 
     ...
) 
    ...
    $this->_productRepositoryInterface = $productRepositoryInterface;
    ...

Luego en tu código puedes hacer:

$product = $this->_productRepositoryInterface->getById($productID);
$this->_productRepositoryInterface->delete($product);

Tenga en cuenta que si tiene el sku de su producto, puede hacerlo en una sola línea:

$this->_productRepositoryInterface->deleteById($productSku);

De hecho, no puede eliminar el producto en el área de la interfaz.

Debe forzar el registro de SecureArea.

Pero si revisas el register función, verá que no puede anular una existente key valor. Necesitas dar de baja la key antes de registrarlo.

/**
 * Register a new variable
 *
 * @param string $key
 * @param mixed $value
 * @param bool $graceful
 * @return void
 * @throws RuntimeException
 */
public function register($key, $value, $graceful = false)

    if (isset($this->_registry[$key])) 
        if ($graceful) 
            return;
        
        throw new RuntimeException('Registry key "' . $key . '" already exists');
    
    $this->_registry[$key] = $value;

Solución basada en otras publicaciones:

Constructor:

public function __construct(
    ........
    MagentoCatalogModelProductRepository $productRepository,
    MagentoFrameworkRegistry $registry
) 
    ......
    $this->productRepository = $productRepository;
    $this->registry = $registry;

lógica:

$this->registry->unregister('isSecureArea');
$this->registry->register('isSecureArea', true);
// using sku
$this->productRepository->deleteById('Z62676');

// using product id
$product = $this->productRepository->getById(1);
$this->productRepository->delete($product);

Si guardas alguna duda o forma de regenerar nuestro crónica eres capaz de dejar una interpretación y con deseo lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *