Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Produkttyp-Kompatibilität mit Preisregeln und Rabatten

Produkttyp-Kompatibilität mit Preisregeln und Rabatten

~6 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026

Ein neuer Produkttyp verkauft sich seit Kapitel 76 vollständig und bucht zuverlässig Punkte. Bevor Kapitel 78 die Serie zusammenfasst, klärt dieses Kapitel eine Frage, die in der Praxis regelmäßig erst nach dem Go-live auffällt: Greifen Katalog- und Warenkorb-Preisregeln auf ein Punkte-Paket überhaupt korrekt?

Catalog Price Rules und der Indexer

Katalog-Preisregeln ("10 % auf alle Produkte der Kategorie X") laufen über den Preis-Indexer - und genau der wurde in Kapitel 72 über indexPriceModel="Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice" bewusst auf dieselbe Standardklasse gesetzt, die auch simple und virtual verwenden. Katalog-Preisregeln funktionieren für Punkte-Pakete deshalb ohne jede Sonderbehandlung - vorausgesetzt, der in Kapitel 71 angesprochene vollständige Reindex nach der Typ-Einführung wurde tatsächlich durchgeführt. Ein nur teilweise aktualisierter Preis-Index würde Punkte-Pakete stillschweigend von jeder Katalog-Preisregel ausschließen, ohne erkennbaren Fehler - der Rabatt fehlt einfach.

Cart Price Rules funktionieren generisch

Warenkorb-Preisregeln (Gutscheincodes, "kostenloser Versand ab X €") prüfen ihre Bedingungen über Magento\SalesRule\Model\Rule\Condition\Product - eine generische Attribut-Bedingungs-Engine, die produkttyp-unabhängig gegen beliebige EAV-Attribute vergleicht (Preis, Kategorie, loyalty_points_package_amount eingeschlossen). Ein Gutscheincode "10 % auf alle Bestellungen über 50 €" funktioniert für eine Bestellung mit Punkte-Paket also ohne jede Anpassung an dieser Serie.

Wo es trotzdem haken kann

Nicht jede Erweiterung hält sich an diese generische, attributbasierte Prüfung. Ein fiktives, aber realistisches Beispiel - keine echte, in diesem Projekt verwendete Erweiterung, nur zur Veranschaulichung des Anti-Musters:

(nur zur Veranschaulichung, keine Datei dieses Moduls)
<?php

declare(strict_types=1);

namespace ThirdPartyPromo\FreeGift\Model\Rule\Condition;

use Magento\Catalog\Model\Product;
use Magento\Rule\Model\Condition\AbstractCondition;

/**
 * Fictional third-party condition class, shown only for recognition - NOT
 * part of app/code/Mironsoft/Loyalty. Illustrates the brittle pattern this
 * chapter warns about: a hardcoded product type whitelist instead of an
 * attribute- or capability-based check.
 */
class ProductTypeGate extends AbstractCondition
{
    /**
     * Rejects every product whose type is not in this hardcoded list -
     * silently excludes loyalty_points_package (and any other custom type)
     * from whatever promotion this condition gates, with no error or log
     * entry anywhere.
     *
     * @param Product $product Product being evaluated against this condition
     * @return bool
     */
    public function isProductEligible(Product $product): bool
    {
        return in_array($product->getTypeId(), ['simple', 'virtual'], true);
    }
}

Achtung: in_array($product->getTypeId(), ['simple', 'virtual'], true) ist in freier Wildbahn ein erschreckend häufiges Muster - vor allem bei älteren "Geschenk bei Kauf"- oder "Bundle-Rabatt"-Erweiterungen, die zum Erscheinungszeitpunkt nur die damals existierenden Core-Typen kannten. Das Ergebnis ist kein Fehler und keine Log-Zeile - die Bedingung liefert einfach false zurück, ein Punkte-Paket wird von der Aktion stillschweigend ausgeschlossen, ohne dass irgendjemand das ohne gezieltes Testen bemerken würde. Der einzige verlässliche Weg, das aufzudecken: jede Preisregel/Kampagne, die auch für Punkte-Pakete gelten soll, tatsächlich einmal mit einem Punkte-Paket im Warenkorb durchklicken.

Eigener Test eindeutig empfohlen

  • Katalog-Preisregel auf die Kategorie der Punkte-Pakete anlegen, vollständigen Reindex abwarten, Preis auf der Produktseite und im Warenkorb prüfen.
  • Gutscheincode-Regel mit einem Mindestbestellwert testen, der nur mit einem Punkte-Paket im Warenkorb erreicht wird.
  • Falls im Projekt vorhanden: jede "Geschenk bei Kauf"- oder ähnliche Drittanbieter-Kampagnen-Erweiterung gezielt gegen ein Punkte-Paket testen, nicht nur gegen simple-Produkte.

Tipp: Dieselbe Vorsicht gilt in die andere Richtung: Ist gewünscht, dass Punkte-Pakete von bestimmten Rabattaktionen explizit ausgeschlossen bleiben (kein "20 % auf alles"-Coupon auf ein bereits stark vergünstigtes Punkte-Paket), lässt sich das über eine ganz normale Produkt-Bedingung in der Warenkorb-Preisregel abbilden - type_id ist als Bedingungsattribut im Admin-Preisregel-Formular standardmäßig verfügbar, kein Custom-Code nötig.

Preisregeln und Rabatte funktionieren für Punkte-Pakete also weitgehend automatisch - der einzige verlässliche Nachweis bleibt ein gezielter End-to-End-Test statt einer stillen Annahme. Kapitel 78 fasst Block 9 zum Abschluss zusammen.