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.

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