/** * @param \Magento\Wishlist\Model\Wishlist $wishlist * @param array $productSkuList * @return void */ public function addProductsToWishlist(\Magento\Wishlist\Model\Wishlist $wishlist, $productSkuList) { $shouldSave = false; foreach ($productSkuList as $productSku) { /** @var \Magento\Catalog\Model\Product $product */ $product = $this->productFactory->create(); $productId = $product->getIdBySku($productSku); $product->load($productId); if (empty($productId)) { continue; } elseif (!$shouldSave) { $shouldSave = true; } $buyRequest = ['product' => $productId, 'qty' => 1]; if (!$product->isVisibleInSiteVisibility()) { $parentIds = $this->productIndexer->getRelationsByChild($productId); if ($parentIds) { $buyRequest['product'] = $parentIds[0]; /** @var \Magento\Catalog\Model\Product $parentProduct */ $parentProduct = $this->productFactory->create(); $parentProduct->load($buyRequest['product']); $configurableCode = \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE; if ($parentProduct->getTypeId() == $configurableCode) { /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable $productType */ $productType = $parentProduct->getTypeInstance(); $buyRequest['super_attribute'] = []; foreach ($productType->getConfigurableAttributes($parentProduct) as $attribute) { $attributeCode = $attribute->getProductAttribute()->getAttributeCode(); $buyRequest['super_attribute'][$attribute->getAttributeId()] = $product->getData($attributeCode); } $product = $parentProduct; } else { continue; } } else { continue; } } $wishlist->addNewItem($product, $buyRequest, true); } if ($shouldSave) { $wishlist->save(); } }