¿Cómo deshabilitar / habilitar un producto mediante programación en Magento2?


9

Estoy tratando de emular el mismo comportamiento que cuando usa el panel de administración para deshabilitar un producto. Estoy tratando de hacer algo como esto:

$product = $this->productRepository->get($sku);
$product->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED);
$this->productRepository->save($product);

Pero todavía lo veo como habilitado en el panel de administración.

Gracias.


Este código debería funcionar. ¿Cuál es el estado cuando mira en el panel de administración, los detalles del producto? Asegúrese de que el modo reindex esté "al guardar" si desea ver los cambios de inmediato
Stijn Duynslaeger - Echron

Si voy a productos> catálogo todavía dice habilitado. Y si trato de [OBTENER] / productos / buscar /? SearchCriteria ... todavía lo veo y el estado es igual a 1.
awavi

¿Estás seguro de que este código se ejecuta? ¿Puedes depurar el código? Tal vez intente establecer otra propiedad como la descripción para ver si el producto se guarda. Verifique los registros de errores. Una vez no pude guardar un producto debido a un campo no válido ... (puede verificarlo intentando guardar un cambio en el panel de administración)
Stijn Duynslaeger - Echron

Sí, estoy seguro de que se ejecuta. Puedo y lo he depurado. No hay registros. Y no, no funciona.
awavi

¿Quiere decir que no puede guardar el producto en el panel de administración?
Stijn Duynslaeger - Echron

Respuestas:


11

El problema fue que $product = $this->productRepository->get($sku);obtiene un producto para la tienda predeterminada. Y si desea deshabilitarlo globalmente, debe pasar

$this->productRepository->get(
    $sku,
    true/* edit mode */,
    0/* global store*/,
    true/* force reload*/
);

¿Explica cómo usar este código para deshabilitar el producto globalmente?
Purushotam Sharma

Este código lo hace!
awavi

gracias, ¡funcionó para mí!
Oktarin

1

Puedes probar con el siguiente código,

Puede verificar el código del archivo principal, vendor / magento / module-catalog-sample-data / Model / Product.php

class Product
{
    public function __construct(
        \Magento\Catalog\Model\ProductFactory $productFactory
    ) {
        $this->productFactory = $productFactory;
    }
    public function saveproduct()
    {

        $product = $this->productFactory->create();
        $product->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED);
        $product->save();
    }
}

Pero este es cuando estás creando un nuevo producto. Ahora sé cuál es el problema. Estoy guardando el producto solo dentro del alcance de la tienda actual. Pero a nivel mundial todavía estará habilitado.
awavi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.