Como posso atribuir 'Novos produtos' a 'Categoria NOVOS PRODUTOS' programaticamente no magento 2.
9
Você precisa obter os IDs da categoria e do produto para definir dados: implemente isto:
$this->getCategoryLinkManagement()->assignProductToCategories(
$product->getSku(),
$product->getCategoryIds()
);
também implementa esta função:
private function getCategoryLinkManagement()
{
if (null === $this->categoryLinkManagement) {
$this->categoryLinkManagement = \Magento\Framework\App\ObjectManager::getInstance()
->get('Magento\Catalog\Api\CategoryLinkManagementInterface');
}
return $this->categoryLinkManagement;
}
dependência de descanso que você deve gerenciar: Magento\Catalog\Api\CategoryLinkManagementInterface
inicializar:
protected $categoryLinkManagement;
O uso direto de \ Magento \ Framework \ App \ ObjectManager :: getInstance () não é válido conforme o magento, portanto você pode injetá-lo no Constructor
Esta resposta é para as versões abaixo do magento 2.2, então, tome nota
Eu acho que isso precisa de uma resposta atualizada que não faça uso do gerenciador de objetos. Além disso, existem algumas distorções envolvidas que não são mencionadas em nenhum lugar.
No seu construtor, injete o CategoryLinkManagementInterface:
Posteriormente no seu código, atribua categorias da seguinte maneira:
Isso substituirá todas as atribuições de categoria anteriores. Se você deseja manter as atribuições de categoria existentes, use algo como isto:
Esteja ciente : o gerenciamento de link adia a atribuição de categoria (para o atributo do produto) ao indexador agendado. Isso significa que, se você fizer outras alterações no produto e salvá-lo após assignProductToCategories ()
as atribuições de categoria desaparecerão, pois $ product contém nulo (se foi um produto recém-criado) ou apenas as categorias atribuídas anteriormente para seu atributo. Além disso,
logo após assignProductToCategories () não ajudará pelo mesmo motivo mencionado acima. Atribua categorias no momento mais recente possível (quando você não salvar o produto posteriormente) ou atribua o atributo manualmente antes de salvar novamente
Se você optar por usar o último, provavelmente poderá voltar a usar apenas setCategoryIds (). Eu não testei nenhum dos casos (assignProductToCategories + setCategoryIds + save ou setCategoryIds only + save) quanto ao impacto no desempenho, por isso não posso comentar sobre isso, mas acho que é importante mencionar toda a circunstância.
fonte
Atribuir produtos à categoria
Remover produtos da categoria
fonte
Mesmo se a pergunta já tiver sido respondida, gostaria de adicionar uma maneira mais rápida de atribuir um grupo de produtos a uma categoria, conforme iterativo
$this->getCategoryLinkManagement()->assignProductToCategories()
é bastante lentaEssa alternativa envolve carregar a categoria à qual queremos atribuir nosso grupo de produtos; portanto, precisamos injetar
Magento\Catalog\Model\CategoryFactory
, podemos definir um grupo de produtos para a categoria usando osetPostedProducts()
que leva uma matriz de['entity_id','position']
modo que um exemplo de código seja algo como:Espero que isso ajude alguém!
fonte
fonte