/** * Fixes the product categories. * * @param ProductInterface $product The product to fix. */ public function fixProduct(ProductInterface $product) { $principalCategory = $product->getPrincipalCategory(); $categories = $product->getCategories(); if (!empty($principalCategory) && !$categories->contains($principalCategory)) { /** * The product has a principal category but this one is not assigned * as product category so this one is added. */ $categories->add($principalCategory); $product->setCategories($categories); } elseif (empty($principalCategory) && 0 < $categories->count()) { /** * The product does not have principal category but has categories * assigned so the first category is assigned as principal category. */ $product->setPrincipalCategory($categories->first()); } }