Customer Price
Customer Price für Magento ermöglicht es Ihnen, individuelle Produktpreise je Kunde oder Kundengruppe direkt im Backend festzulegen. Der Kunde sieht, wenn er eingeloggt ist, den normalen Preis als Streichpreis und den individuellen Preis als Sonderpreis ("Ihr Preis").
Wenn Sie zur Shop-Anbindung eine REST-API-Schnittstelle nutzen, können Sie die Kunden- oder Kundengruppen-Preise über diese einspielen.
Customer Price im Überblick:
- Kundenspezifische Produktpreise
- Konfigurierbar für Kunden oder Kundengruppen
- Frontend-Darstellung wahlweise Streichpreis oder Sonderpreis
- Einfache Konfiguration im Backend
- REST-API-Schnittstelle zum Einspielen von Kunden-,
bzw. Kundengruppen-Preisen - Gern unterstützen wir Sie bei der Installation
Customer Price Funktionen im Detail:
Individuelle Preisgestaltung für Kunden und Kundengruppen:
- Die Konfiguration der kundenspezifischen Preise ist sowohl für einzelne Kunden als auch für Kundengruppen möglich. Dies bedeutet, dass Sie individuelle Preise für bestimmte Kunden oder Kundengruppen festlegen können.
- Egal, ob Sie exklusive Angebote für Stammkunden erstellenoder Wiederverkäufern spezielle Konditionen gewähren möchten - mit der Customer Price Extension haben Sie die volle Kontrolle über die Preisgestaltung.
Maximieren Sie Ihren Verkaufserfolg: Customer Price Extension nutzen:
- Mit der Customer Price Extension haben Sie die Flexibilität und Kontrolle, um Ihre Produktpreise individuell anzupassen und Ihren Kunden ein personalisiertes Einkaufserlebnis zu bieten.
- Steigern Sie Ihre Kundenzufriedenheit und Umsätze, indem Sie Ihren Kunden maßgeschneiderte Preise anbieten. Holen Sie sich noch heute die Customer Price Extension und maximieren Sie Ihren Verkaufserfolg.
Was ist der Vorteil individueller Produktpreise für Kunden in Online-Shops?
Individuelle Produktpreise sind aus mehreren Gründen wichtig: Sie ermöglichen eine personalisierte Einkaufserfahrung, bei der Kunden die Möglichkeit haben, spezielle Preise basierend auf ihren individuellen Bedürfnissen und Anforderungen zu erhalten. Individuelle Produktpreise können dazu beitragen, Kundenbindung zu fördern, da Sie Ihren Kunden das Gefühl geben, dass ihre Loyalität und ihr Geschäft wertgeschätzt werden.
Kundenspezifische Produktpreise ermöglichen Unternehmen, ihre Gewinnmargen zu optimieren und gleichzeitig Wettbewerbsfähigkeit zu gewährleisten. Dies kann u.a. durch die Implementierung von Rabatten für wiederkehrende Kunden erreicht werden. Insgesamt tragen individuelle Produktpreise dazu bei, die Kundenzufriedenheit zu steigern und das Umsatzpotenzial für Unternehmen zu maximieren.
| Modul Version | 1.7.8 |
|---|---|
| CE | 2.4.4, 2.4.5, 2.4.6 |
| EE | 2.4.4, 2.4.5, 2.4.6 |
| Sprachen | englisch, deutsch |
Release Notes - Customer Price
Version 1.7.8 (29.10.2026)
- IMPROVEMENT CSV files that failed to import are now deleted from
var/customerprice/failedafter 14 days; like indone, the retention period starts with the import, not with the upload
Version 1.7.7 (29.10.2026)
- IMPROVEMENT Successfully imported CSV files are now deleted from
var/customerprice/doneafter 7 days; files invar/customerprice/failedare kept for analysis - CHANGE Import reports are now written to
var/customerprice/reports/instead ofvar/cleverzoeger_customerprice/import-reports/, next to the import files; with deployments that only sharevar/customerpriceacross releases, reports were lost on every deploy. Existing reports are not moved
Version 1.7.6 (28.10.2026)
- FIX The CSV discount import aborted completely as soon as one matched customer could not be saved, e.g. because one of their addresses had no company although it is a required field ("Company" is a required value) or a name contained characters Magento's name validator rejects ("Last Name is not valid!"); the import saved the whole customer including all addresses, although only the company ID changes. The company ID is now persisted as a single attribute, so customer and address validation no longer runs
- FIX An error while processing a single CSV row no longer aborts the whole import and moves the file to
failed; the row is logged and written to the import report with typeerror, and the import continues with the next customer - FIX The "company ID not in CSV" check failed with "The "company_id" attribute name is invalid" when the configured company ID reference field is a plain
customer_entitycolumn (e.g.company_idfromCCCC_CompanyUser) instead of an EAV attribute; such columns are now queried directly - IMPROVEMENT The import report is now also written if the import aborts, so the rows collected so far are not lost
- IMPROVEMENT The CLI command
cleverzoeger:customerprice:import-discountsalso prints the number of failed rows
Version 1.7.5 (27.10.2026)
- FIX
setup:installon an empty database aborted with "Table eav_entity_type doesn't exist": the console commandImportCustomerDiscountsCommandbuilt the customer import service (and with it the customer EAV config) in its constructor; the service is now injected as a proxy and only created when the command runs
Version 1.7.4 (18.09.2026)
- CHANGE Fixed a codereview-bot warning:
Plugin/Magento/Quote/Model/Quote.php'saroundCollectTotals()docblock had its short description spread over two lines
Version 1.7.3 (18.09.2026)
- FIX The AJAX price-refresh endpoint (
Controller/Ajax/Prices.php) could render a stale, unrelated price for a product:PriceBox::getCacheLifetime()gives every price box a 24hblock_htmlcache keyed by product + customer group (never by individual customer), so this endpoint could read back (or poison) the cache populated by the normal page render instead of applying the current customer's individual price; fixed by disabling the block cache for this render call - FIX Individual customer prices were never applied when adding a product to the cart (or anywhere else in checkout/order pricing), only on the product page's price display:
IndividualPriceContextis only ever allowed inside the AJAX price-refresh endpoint, so quote total collection always fell back to the group-level price lookup; a new plugin onMagento\Quote\Model\Quote::collectTotals()now allows individual prices there too, since quote totals are never part of the full page cache
Version 1.7.2 (18.09.2026)
- CHANGE Cleaned up codereview-bot findings: added missing PHPDoc blocks, fixed multi-line short descriptions, wrapped lines over 120 characters, and lowered
CustomerPriceService::processPriceForProduct()'s cyclomatic complexity by extracting the price-model lookup and application into their own methods
Version 1.7.0 (18.09.2026)
- FEATURE Grouped products now also show the configured price prefix (e.g. "Your price:") on the "Starting at" price box when the cheapest associated product carries a customer price; the underlying amount already reflected the customer price, only the label was still stock Magento's
- FIX On grouped-product listings, the customer price was never applied to the associated simple products, because
Grouped::getAssociatedProducts()loads them with a fixed attribute list that did not include the configured "discountable" gate attribute, soisProductDiscountable()always evaluated to false; a plugin now adds that attribute to the collection'saddAttributeToSelect()call - FIX The regular (struck-through) price was missing on grouped-product listings when the cheapest associated product carried a customer price used as special price; the grouped price box only ever rendered the discounted amount
- FIX The grouped "Starting at" label now uses the "from" prefix wording (like configurable's "As low as") instead of the exact-price wording, since it always refers to the cheapest of several associated products
- FIX Fatal error "Cannot redeclare class ... (previously declared as local import)" on any grouped-product page, caused by the new plugin importing a class with the same short name as itself; fixed by using the fully qualified class name in the type-hint instead, matching the other plugins in this module
Version 1.6.0 (16.09.2026)
- FEATURE CSV import for per-customer discounts and company IDs: matches Magento customers via email, reconciles the company ID against a configurable "company ID reference field" and writes a global discount percentage into the Customer Price grid
- FEATURE
cleverzoeger:customerprice:import-discounts <file>CLI command to trigger the CSV import manually or via automation - FEATURE Cron job (
cleverzoeger_customerprice_import_discounts, every 15 minutes) picks up CSV files dropped intovar/customerprice; each file is moved toprocessingwhile it is imported, then todoneon success orfailed(with a log entry) on error - FEATURE The imported discount percentage is stored as a Customer Price row without a product (product_id = null), which now acts as a catalog-wide fallback whenever no product-specific customer price exists for that customer/group
- IMPROVEMENT Mismatches during the CSV import (existing company ID not found in the CSV, or company name/city not matching for auto-linking) are written to a report CSV under
var/cleverzoeger_customerprice/import-reportsinstead of silently overwriting customer data - FIX Full page cache now varies per customer when they have an individual customer price row (not just per customer group), so two customers of the same group no longer risk seeing each other's cached, customer-specific price
- FIX
type(fixed price / percentage discount) is now selectable in the admin edit form and shown as a column in the admin grid - FIX Added German (de_DE) translations for the Customer Price grid/form field labels
- FEATURE New config setting "product attribute that gates the customer price" lets admins pick an existing boolean product attribute; the customer price is only applied when it is set to "Yes" on the product (leave unset to apply to all products, as before)
- FIX The regular (struck-through) price was missing for configurable products in category/listing pages, while it was shown correctly for simple products; the template unconditionally hid it in listings, overriding the plugin that already computes and marks the customer price for configurables
- FIX The regular price row for configurable products now shows a "Regular Price from" label
- FIX On the product page, both price labels for configurable products disappeared again once a customer fully selected a variant (e.g. size and color); Luma visually hides price labels for genuine special prices once a specific option combination resolves to one, which now also swallowed our own "Regular Price from" / "Your price" labels
- FIX Swatch-based configurable products (color/size shown as swatches instead of dropdowns) never switched the "Regular Price from" / "As low as" labels to their exact wording, because
Magento_Swatches/js/swatch-rendererreimplements its own price/label logic instead of delegating tomage.configurable; added a second RequireJS mixin targeting the swatch renderer - FIX The "Regular Price from" label now also switches to "Regular Price" once a variant is fully selected, mirroring the existing final-price label toggle
- IMPROVEMENT Resolved several codereview-bot warnings (discouraged
pathinfo()/basename()/is_readable()/file_get_contents()in favour of Magento's filesystem abstractions, an empty catch block, missing method-annotation parameters, English translation of two comments) - CHANGE The Adobe Commerce edition guard now accepts either the
CleverZoeger_CustomerPriceCloudorCleverZoeger_CustomerPriceEnterprisecompanion module instead of just the Enterprise one - CHANGE Copyright banner year corrected to 2026 across all files that still showed 2023
- FIX Admin grid crashed with "Element 'tooltip': This element is not expected" because
<tooltip>is only valid on form fields, not grid columns; removed the invalid tooltip from the "Price" column - FIX
CsvReaderServiceno longer depends on the unboundFilesystem\DriverInterface(which crashed any CLI command via the object manager); depends on the concreteFilesystem\Driver\Fileinstead - FIX Saving a Customer Price with an empty "Product ID" field (the catalog-wide fallback row) crashed with a foreign key constraint violation, because the empty string was inserted as-is instead of being normalized to
nulllike the group/customer ID fields already were
Version 1.5.0 (10.09.2026)
- CHANGE MARKETPLACE_PROJECT_NAME removed from the CI configuration
Version 1.4.0 (09.09.2026)
- CHANGE PHP 7.4 removed from the composer requirements, PHP 8.1 or newer is required
- CHANGE Version in composer.json matches this changelog again
Version 1.3.3 (07.09.2026)
- FIX With the option "use customer price as special price" switched off, no struck-through price identical to the customer price is shown any more
- FIX With "ignore customer price when product has a special price" the regular price on the product page is no longer replaced by the customer price; product page and listing now show the same prices
Version 1.3.2 (07.09.2026)
- FIX The regular price is shown again in the product listing when a customer price is used as special price; the listing decides via
FinalPriceBox::hasSpecialPrice(), which does not know customer prices
Version 1.3.1 (25.08.2026)
- CHANGE Documentation images renamed to the customer-price_clever-zoeger-extension_<content> naming scheme
Version 1.3.0 (19.08.2026)
- FEATURE Edition guard: companion module (Enterprise or Cloud) unlocks the module on Adobe Commerce
- IMPROVEMENT PHPStan errors fixed, duplicate code removed and the base64_decode call annotated for phpcs
- IMPROVEMENT Documentation and shop images added (logo, screenshots)
Version 1.2.0 (27.11.2025)
- FEATURE PHP-Version 8.3 support
Version 1.1.0 (05.01.2024)
- FEATURE Magento 2.4.6 compatibility
- FEATURE Restructuring CHANGELOG.md and cleanup
- FIX Display of your price label
Version 1.0.2 (05.06.2023)
- FEATURE Required version of base extension updated