Update product visibility Magento2
-
20-01-2021 - |
Question
I am creating a product programmatically, trying to set the visibility with below code
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\Product');
$product->setVisibility(4);
$product->save();
The above code works perfectly, but it is not working when I use like below.
$product->setVisibility('Catalog, Search');
The product is saving, but visibility is not set when used like above. Can anyone suggest me how to update the visibility? I am reading it from the csv file and updating.
Solution
$product->setVisibility('Catalog, Search');
This will not work because In Visibility you can set Integer value.
so work around is
$array = [ 1 => 'Not Visible Individually',
2 => 'Catalog',
3 => 'Search',
4 => 'Catalog, Search'
];
$currentValue = array_search("Catalog, Search",$array);
$product->setVisibility($currentValue);
OTHER TIPS
We have to pass the Integer value for the "Catalog, Search" and it's 4.
When you check in Magento 2 admin. Visibility field have following options:
<option data-title="Not Visible Individually" value="1">Not Visible Individually</option>
<option data-title="Catalog" value="2">Catalog</option>
<option data-title="Search" value="3">Search</option>
<option data-title="Catalog, Search" value="4">Catalog, Search</option>
So you have to use code like
$visibility_array = ['Not Visible Individually' => 1,
'Catalog' => 2,
'Search' => 3,
'Catalog, Search' => 4
];
$visibility = $visibility_array['Catalog, Search'];
$product->setVisibility($visibility);
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange