如何在Magento2中以编程方式禁用/启用产品?


9

我正在尝试模仿与使用管理面板禁用产品时相同的行为。我正在尝试做这样的事情:

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

但我仍然在管理面板中将其启用。

谢谢。


此代码应该起作用。当您在管理面板中查看产品详细信息时,状态如何?如果要立即查看更改,请确保重新索引模式为“保存”
Stijn Duynslaeger-Echron

如果我转到产品>目录,它仍然显示已启用。而且,如果我尝试[GET] / products / search /?searchCriteria ...我仍然看到它,并且状态等于
1。– awavi

您确定此代码会执行吗?您可以调试代码吗?也许尝试设置另一个属性,例如description,以查看产品是否被保存。检查错误日志。我曾经因为字段无效而无法保存产品...(您可以通过尝试在管理面板中保存更改来进行检查)
Stijn Duynslaeger-Echron 2016年

是的,我确定它会执行。我可以并且已经调试了它。没有日志。不,它不起作用。
awavi '16

您是说无法将产品保存在管理面板中?
Stijn Duynslaeger-Echron

Answers:


11

问题是$product = $this->productRepository->get($sku);获取默认商店的产品。如果要全局禁用它,则需要通过

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

请说明如何使用此代码全局禁用产品?
Purushotam Sharma

此代码可以!
awavi

谢谢-对我有用!
Oktarin

1

您可以尝试以下代码,

您可以检查核心文件代码,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();
    }
}

但这是在您创建新产品时。我现在知道问题出在哪里。我正在将产品保存在当前商店的范围内。但是在全球范围内仍将启用它。
awavi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.