Sunil
+3
Nov 28, 2025
visibility 777
star star star star star
(1 votes)

Implementing Custom Line Item Pricing in Optimizely Commerce 14

In many enterprise commerce implementations, business users often need the flexibility to override product pricing at the cart level - especially during customer service operations, B2B negotiations, or manual order creation.

Recently, I had a client requirement where the Super Admin (a special CMS/Commerce role) needed the ability to modify the price of each line item directly from the Cart page.

For Example:
If the default price of a product is $1000, a Super Admin should be able to change it to $900, $850, or any custom value - even if this price is not defined in the price lists.

This custom pricing must also continue to work correctly with:

  • The promotions engine

  • Tax calculations

  • Recalculation workflows

  • Order totals

To meet this requirement cleanly and safely, we needed a way to override PlacedPrice at the line item level in a way that stays aligned with Commerce’s pricing pipeline.

This blog explains the correct, Commerce-native way to implement custom line-item pricing.

 

Use a Custom Price Processor

To implement custom pricing properly, we must plug into Commerce’s pricing pipeline via IPlacedPriceProcessor

1 - Store the Custom Price on the Line Item

When a Super Admin updates the price on the cart page:

lineItem.Properties["SuperAdminCustomPrice"] = customPrice.ToString(); // SuperAdminCustomPrice is meta field
_cartRepository.SaveCart(cart);

This property persists with the cart/item.

2 - Implement the Custom Price Processor

[ServiceConfiguration(typeof(IPlacedPriceProcessor))]
public class SuperAdminPriceProcessor : DefaultPlacedPriceProcessor
{
    public override void ApplyPlacedPrice(
        IOrderGroup orderGroup,
        IOrderForm orderForm,
        ILineItem lineItem,
        IMarket market)
    {
        // Allow Commerce to set its default price
        base.ApplyPlacedPrice(orderGroup, orderForm, lineItem, market);

        // Check for Super Admin’s custom price
        if (!lineItem.Properties.ContainsKey("SuperAdminCustomPrice"))
        {
            return;
        }

        if (decimal.TryParse(
            lineItem.Properties["SuperAdminCustomPrice"].ToString(),
            out var customPrice))
        {
            // Save original Commerce price for audit/rollback
            lineItem.Properties["OriginalPlacedPrice"] = lineItem.PlacedPrice;

            // Apply custom override
            lineItem.PlacedPrice = customPrice;
        }
    }
}

 

3 - How It Looks in the UI

Your “Edit Price” option on the cart page simply updates the custom property:

if (User.IsInRole("SuperAdmin"))
{
    lineItem.Properties["SuperAdminCustomPrice"] = newPrice;
}

 

This was exactly what the client needed:
A clean, production-safe way for Super Admins to override line item prices without breaking any Commerce functionality.

 

Thanks,

Sunil Kumar

 

Nov 28, 2025

Comments

error Please login to comment.
Latest blogs
Copies vs. Connections: Modeling Content Areas for Multilingual Success

Starting With the Simple Question Most multilingual content modeling conversations start with a deceptively simple question from a client: "If we s...

Vipin Banka | Aug 23, 2026

Content Transfer coming to Optimizely SaaS CMS

Back in June I released Content Transfer on the Optimizely nuget feed – today I’m releasing version 1.0 , because we’ve had it running out in the...

Matt Pallatt | Aug 23, 2026

Improving Optimizely Product Information in LLM Tools

Tools like Claude Code can be great for working with Optimizely CMS, but when they index outdated or incomplete information about developing a...

Nicholas Sideras | Aug 21, 2026 |

How to Get a Bacpac Out of DXP (And Never Do It By Hand Again)

Every Optimizely DXP project eventually runs into the same task: getting production data onto a local machine so you can actually troubleshoot...

KennyG | Aug 20, 2026