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.

AUSGEZEICHNET

Ein von uns entwickeltes Webportal wurde mit dem Humboldt-Preis für Nachhaltigkeit ausgezeichnet.

PROJEKT

Nachhaltige Sportveranstaltungen in Deutschland

AUSZEICHNUNG

Wissenschaftliche Auszeichnung
in Kooperation mit der Deutschen Sporthochschule Köln

Projekt Webportal Mockup