Sunil
Nov 28, 2025
  483
(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

Please login to comment.
Latest blogs
Optimizely Commerce vs Composable Commerce: What Should You Do with CMS 13?

As organizations modernize their digital experience platforms, a common architectural question emerges: Should we continue using Optimizely Commerc...

Aniket | Mar 12, 2026

Missing Properties tool for Optimizely CMS

If you have been working with Optimizely CMS for a while you have probably accumulated some technical debt in your property definitions. When you...

Per Nergård (MVP) | Mar 10, 2026

AI Generated Optimizely Developer Newsletter

Updates in the Optimizely ecosystem are everywhere: blog posts, forums, release notes, NuGet packages, and documentation changes. This newsletter...

Allan Thraen | Mar 10, 2026 |

Lessons from Building Production-Ready Opal Tools

AI tools are becoming a normal part of modern digital platforms. With  Optimizely Opal , teams can build tools that automate real tasks across the...

Praful Jangid | Mar 7, 2026