Magento 2 Produktindividuelle Versandkosten Titelbild

Unsere Webagentur hatte die Aufgabe, die Versandkosten individuell für jedes Produkt des Magento2-Onlineshops festzulegen. Genauer: Jedem Produkt, abhängig von einem bestimmten Attribut, ein bestimmtes Gewicht zuzuweisen, mit dem dann (mit Hilfe der tabellenbasierten Versandkosten) die endgültigen, gesamten Versandkosten bestimmt werden können. Hierzu kann man beispielsweise ein kleines Plugin schreiben.

 

 Also zuerst das betreffende Model in der di.xml eines Moduls deklarieren und auf das dann zu erstellende Model zeigen. In unserem Fall möchten wir das Model

 

Magento\Quote\Model\Quote\Item

 

verändern, in der di.xml lautet es dann beispielweise:

 

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <type name="Magento\Quote\Model\Quote\Item">

        <plugin name="IRGENDEINNAME"

          type="VENDORNAME\MODULENAME\Plugin\Quote\ShippingWeightQuoteItem" sortOrder="2" />

    </type>

</config>

 

Das Zielmodell kann natürlich auch an irgendeiner anderen Stelle liegen. Hier ist es jedoch die Datei

 

app/code/VENDORNAME/MODULENAME/Plugin/Quote/ShippingWeightQuoteItem.php

 

mit folgendem Inhalt (ebenfalls beispielhaft):

 

<?php

namespace Econcess\ModifyShipping\Plugin\Quote;

class ShippingWeightQuoteItem

{   

                public function afterSetProduct(\Magento\Quote\Model\Quote\Item $subject, $result)

    {

                               $mod_weight = 0;

                               $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

                               $product_versand = $objectManager->create('Magento\Catalog\Model\Product')->load($subject->getProduct()->getId());

                               $versand_id = $product_versand->getData('IRGENDEINATTRIBUT');

                               if ($versand_id == 44) {

                               } elseif ($versand_id == 33) {

                                               $mod_weight = 1;

                               } elseif ($versand_id == 22 || $versand_id == 11) {

                                               $mod_weight = 2;

                               } elseif ($versand_id == 88) {

                                               $mod_weight = 3;

                               } elseif ($versand_id == 99) {

                                               $mod_weight = 4;

                               } elseif ($versand_id == 77) {

                                               $mod_weight = 5;

                               } elseif ($versand_id == 66) {

                                               $mod_weight = 6;

                               } else {

                                               $mod_weight = $product_versand->getData('weight');

                               }

                               $result->setWeight($mod_weight);

                               return $result;

    }

}

 

Damit werden die Gewichte geändert und die Versandkosten des Shops werden richtig berechnet.

 

Gesehen in unserer Internetagentur in einem Magento 2 Onlineshop CE 2.3.5.