I want to add additional options to the next product on the sales_quote_remove_item event while removing the first product from a cart.

First Product, I have already added the first product to cart with additional options

Second Product with no additional options(Normal Add to cart).

While removing First Product with additional options, I want to check if First product has additional options or not

if Yes, First Product will be removed from the cart, I want to add additional options to the Second Product in the cart as shown in the below screenshot.



<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <event name="sales_quote_remove_item">
        <observer name="remove_item" instance="Vendor\Module\Observer\AddFeeToRemoveItemObserver" />



namespace Vendor\Module\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Checkout\Model\Session;
use Magento\Framework\Serialize\Serializer\Json as JsonSerializer;

class AddFeeToRemoveItemObserver implements ObserverInterface
     * @var RequestInterface
    protected $_request;

    * Json Serializer
    * @var JsonSerializer
    protected $jsonSerializer;

     * Set payment fee to order
     * @param EventObserver $observer
     * @return $this
    public function __construct(
        JsonSerializer $jsonSerializer,
        RequestInterface $request,
        Session $checkoutSession,
        \Magento\Quote\Model\Quote\ItemFactory $quoteItemFactory,
        \Magento\Quote\Model\ResourceModel\Quote\Item $itemResourceModel,
        \Magento\Quote\Model\QuoteFactory $quoteFactory,
        \Magento\Quote\Api\CartRepositoryInterface $itemRepository
    ) {
        $this->_request = $request;
        $this->jsonSerializer = $jsonSerializer;
        $this->_checkoutSession = $checkoutSession;
        $this->quoteItemFactory = $quoteItemFactory;
        $this->itemResourceModel = $itemResourceModel;
        $this->quoteFactory = $quoteFactory;
        $this->itemRepository = $itemRepository;

     * @param \Magento\Framework\Event\Observer $observer
    public function execute(\Magento\Framework\Event\Observer $observer)
        $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
        $logger = new \Zend\Log\Logger();

        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $priceHelper = $objectManager->create('Magento\Framework\Pricing\Helper\Data');

        $quoteItem = $observer->getQuoteItem();
        $quote = $quoteItem->getQuote();
        $product = $quoteItem->getProduct();

        $additionalOptions = [];
        if ($this->_request->getFullActionName() == 'checkout_cart_delete') {
            if (count($quote->getAllVisibleItems())) {
                foreach ($quote->getAllVisibleItems() as $loop_item) {
                    $helper = $objectManager->create('\Magento\Catalog\Helper\Product\Configuration');
                    $quoteItemFeelabel = "";
                    foreach ($options as $option) {
                        $quoteItemFeelabel = $option['label'];
                    $price = 10;
                    $additionalOptions[] = array(
                                'label' => __("My Custom Label"),
                                'value' => $priceHelper->currency($price, true, false),

I've tried the above code but It's not working.

If anyone has a solution, please let me know.

  • Do you need the additional options for only one item in the cart or multiple products will have the additional options. Dec 23 '19 at 14:14
  • @RiddhishBhayani Only one
    – Mohit Rane
    Dec 24 '19 at 5:08


I would recommend to use it at the quote level rather than Item level. Using that approach it will be easier to achieve that. Quote attribute is the better approach for ideas you can refer below.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.