🔥 Just Launched! Werra Premium Template for HyväSee it in Action

How to Programmatically Reorder in Magento 2? (Get Code) 

By Sanjay JethvaUpdated on Apr 10, 2025 2 min read

Reordering allows customers to place a new order based on their previous order with the same items, details, and payment/shipping information. 

This helps shoppers to avoid going through the entire order placement process from scratch.

In this blog, learn to programmatically reorder in Magento 2, especially if you offer a subscription-based pricing model. 

Steps to Programmatically Reorder in Magento 2

Firstly, to get reorder details, you will need to load the information of the previous order. Then, create a new quote and quickly get the previous order value. 

Create a custom script or helper class at Vendor/Module/Helper and use the below code:

<?php

namespace Vendor\Module\Helper;

use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Sales\Model\OrderFactory;
use Magento\Quote\Model\QuoteFactory;
use Magento\Quote\Model\QuoteManagement;
use Magento\Quote\Api\CartRepositoryInterface;
use Magento\Customer\Model\CustomerFactory;
use Magento\Store\Model\StoreManagerInterface;

class Reorder extends AbstractHelper
{
    protected $orderFactory;
    protected $quoteFactory;
    protected $quoteManagement;
    protected $cartRepository;
    protected $customerFactory;
    protected $storeManager;

    public function __construct(
        OrderFactory $orderFactory,
        QuoteFactory $quoteFactory,
        QuoteManagement $quoteManagement,
        CartRepositoryInterface $cartRepository,
        CustomerFactory $customerFactory,
        StoreManagerInterface $storeManager
    ) {
        $this->orderFactory = $orderFactory;
        $this->quoteFactory = $quoteFactory;
        $this->quoteManagement = $quoteManagement;
        $this->cartRepository = $cartRepository;
        $this->customerFactory = $customerFactory;
        $this->storeManager = $storeManager;
    }

    public function reorder($orderId)
    {
        // Load the original order
        $order = $this->orderFactory->create()->load($orderId);
        if (!$order->getId()) {
            throw new \Magento\Framework\Exception\LocalizedException(__('Order not found.'));
        }

        // Create a new quote
        $quote = $this->quoteFactory->create();
        $quote->setStoreId($this->storeManager->getStore()->getId());

        // Assign customer to the quote
        $customer = $this->customerFactory->create()->load($order->getCustomerId());
        $quote->assignCustomer($customer);

        // Add order items to the new quote
        foreach ($order->getAllVisibleItems() as $item) {
            $quote->addProduct($item->getProduct(), (int) $item->getQtyOrdered());
        }

        // Set billing and shipping addresses
        $quote->getBillingAddress()->addData($order->getBillingAddress()->getData());
        $quote->getShippingAddress()->addData($order->getShippingAddress()->getData());

        // Set shipping and payment methods
        $quote->getShippingAddress()->setCollectShippingRates(true)->collectShippingRates()
            ->setShippingMethod($order->getShippingMethod());
        $quote->setPaymentMethod($order->getPayment()->getMethod());
        $quote->setInventoryProcessed(false);

        // Collect totals and save quote
        $quote->collectTotals();
        $this->cartRepository->save($quote);

        // Convert quote to order
        $order = $this->quoteManagement->submit($quote);
        return $order;
    }
}

Then, call the reorder function with the order ID in the frontend controller as per your use case:

$order = $this->reorderHelper->reorder(100);

That’s it. You have created an order programmatically in Magento 2.  Try this solution and allow your shoppers to create a new order instantly. 

Sanjay Jethva Full Image
Article bySanjay Jethva

Sanjay is the co-founder and CTO of Meetanshi with hands-on expertise with Magento since 2011. He specializes in complex development, integrations, extensions, and customizations. Sanjay is one the top 50 contributor to the Magento community and is recognized by Adobe. His passion for Magento 2 and Shopify solutions has made him a trusted source for businesses seeking to optimize their online stores. He loves sharing technical solutions related to Magento 2 & Shopify.