Como desativar / ativar um produto programaticamente no Magento2?


9

Estou tentando emular o mesmo comportamento de quando você usa o painel de administração para desativar um produto. Estou tentando fazer algo assim:

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

Mas ainda o vejo ativado no painel de administração.

Obrigado.


Este código deve funcionar. Qual é o status quando você olha no painel de administração, os detalhes do produto? Verifique se o modo de reindexação está "em salvamento" se você quiser ver as alterações imediatamente
Stijn Duynslaeger - Echron 29/16/16

Se eu for para produtos> catálogo, ele ainda diz ativado. E se eu tentar [GET] / products / search /? SearchCriteria ... ainda o vejo e o status é igual a 1. #
awavi

Você tem certeza de que esse código é executado? Você pode depurar o código? Talvez tente definir outra propriedade como descrição para ver se o produto é salvo. Verifique os logs de erro. Certa vez, não foi possível salvar um produto por causa de um campo inválido ... (você pode verificar isso tentando salvar uma alteração no painel do administrador)
Stijn Duynslaeger - Echron 29/16

Sim, tenho certeza de que é executado. Eu posso e o depurei. Sem registros. E não, não funciona.
awavi

Quer dizer que você não pode salvar o produto no painel de administração?
Stijn Duynslaeger - Echron

Respostas:


11

O problema foi que $product = $this->productRepository->get($sku);obtém um produto para a loja padrão. E se você quiser desativá-lo globalmente, precisará passar

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

Por favor, explique como usar esse código para desativar o produto globalmente?
Purushotam Sharma

Este código faz!
21818 awavi

obrigado - funcionou para mim!
Oktarin 02/07/19

1

Você pode tentar com o código abaixo,

Você pode verificar o código do arquivo 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();
    }
}

Mas este é quando você está criando um novo produto. Agora eu sei qual é o problema. Estou salvando o produto apenas dentro do escopo da loja atual. Mas globalmente ainda será ativado.
awavi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.