@@ -256,13 +256,22 @@ protected function setProductLinks(\Magento\Catalog\Model\Product $product)
256
256
257
257
$ product = $ this ->productLinks ->initializeLinks ($ product , $ links );
258
258
$ productLinks = $ product ->getProductLinks ();
259
+ $ linkTypes = [];
260
+
261
+ /** @var \Magento\Catalog\Api\Data\ProductLinkTypeInterface $linkTypeObject */
262
+ foreach ($ this ->linkTypeProvider ->getItems () as $ linkTypeObject ) {
263
+ $ linkTypes [$ linkTypeObject ->getName ()] = $ product ->getData ($ linkTypeObject ->getName () . '_readonly ' );
264
+ }
265
+
266
+ // skip linkTypes that were already processed on initializeLinks plugins
267
+ foreach ($ productLinks as $ productLink ) {
268
+ unset($ linkTypes [$ productLink ->getLinkType ()]);
269
+ }
259
270
260
271
/** @var \Magento\Catalog\Api\Data\ProductLinkTypeInterface $linkType */
261
- foreach ($ this ->linkTypeProvider ->getItems () as $ linkType ) {
262
- $ readonly = $ product ->getData ($ linkType ->getName () . '_readonly ' );
263
-
264
- if (isset ($ links [$ linkType ->getName ()]) && !$ readonly ) {
265
- foreach ((array ) $ links [$ linkType ->getName ()] as $ linkData ) {
272
+ foreach ($ linkTypes as $ linkType => $ readonly ) {
273
+ if (isset ($ links [$ linkType ]) && !$ readonly ) {
274
+ foreach ((array ) $ links [$ linkType ] as $ linkData ) {
266
275
if (empty ($ linkData ['id ' ])) {
267
276
continue ;
268
277
}
@@ -271,7 +280,7 @@ protected function setProductLinks(\Magento\Catalog\Model\Product $product)
271
280
$ link = $ this ->getProductLinkFactory ()->create ();
272
281
$ link ->setSku ($ product ->getSku ())
273
282
->setLinkedProductSku ($ linkProduct ->getSku ())
274
- ->setLinkType ($ linkType-> getName () )
283
+ ->setLinkType ($ linkType )
275
284
->setPosition (isset ($ linkData ['position ' ]) ? (int )$ linkData ['position ' ] : 0 );
276
285
$ productLinks [] = $ link ;
277
286
}
0 commit comments