¿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.

awavi
fuente
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*/
);
awavi
fuente
¿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();
    }
}
Rakesh Jesadiya
fuente
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