Back to Top

Create Custom Order Status Programatically in Adobe Commerce (Magento 2)

Updated 31 July 2024

Let’s learn how to create custom order status in Adobe Commerce (Magento 2)

I am using Setup script to create custom order status. We can achieve this by using the following methods:


1st Method: Using InstallData file
Create a file in you custom module like:
Webkul/OrderManagement/Setup/InstallData.php

<?php
/**
 * Webkul Software
 *
 * @category Webkul
 * @package Webkul_OrderManagement
 * @copyright Webkul Software Private Limited (https://webkul.com)
 * @license https://store.webkul.com/license.html
 */
namespace Webkul\OrderManagement\Setup;

use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\DB\Ddl\Table;

class InstallData implements InstallDataInterface
{
    /**
     * Installs DB schema for a module
     *
     * @param SchemaSetupInterface $setup
     * @param ModuleContextInterface $context
     * @return void
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;
        $installer->startSetup(); 

        $data[] = ['status' => 'approved', 'label' => 'Approve'];
        $data[] = ['status' => 'disapproved', 'label' => 'Disapprove'];
        $setup->getConnection()->insertArray($setup->getTable('sales_order_status'), ['status', 'label'], $data);

        $setup->getConnection()->insertArray(
        $setup->getTable('sales_order_status_state'),
        ['status', 'state', 'is_default','visible_on_front'],
        [
            ['approved','processing', '0', '1'], 
            ['disapproved', 'pending', '0', '1']
        ]
        );

        $setup->endSetup();
    }
}

InstallData conforms to InstallDataInterface , which requires the implementation of the install method that accepts two parameters of type ModuleDataSetupInterface and ModuleContextInterface .


Note: The module’s module.xml file must have setup_version to create customer custom attribute using InstallData. To know steps to create module in Adobe Commerce (Magento 2),  you can check our another blog here.


2nd Method: Using Data Patch
In this method, we need to create a data patch file as OrderStatus.php in our custom module Setup folder. Note: You can also use the different file name and class name.
complete path: app/code/Webkul/OrderManagement/Setup/Patch/Data/OrderStatus.php

Searching for an experienced
Magento 2 Company ?
Find out More

To know more about data and schema patches, click here.

<?php
namespace Webkul\OrderManagement\Setup\Patch\Data;

use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class OrderStatus implements DataPatchInterface
{
    /**
     * @var ModuleDataSetupInterface
     */
    private $moduleDataSetup;

    /**
     * @param ModuleDataSetupInterface $moduleDataSetup
     */
    public function __construct(
        ModuleDataSetupInterface $moduleDataSetup,
    ) {
        $this->moduleDataSetup = $moduleDataSetup;
    }

    /**
     * Add eav attributes
     */
    public function apply()
    {
        $installer = $this->moduleDataSetup;
        $installer->startSetup();
        $data[] = ['status' => 'approved', 'label' => 'Approve'];
        $data[] = ['status' => 'disapproved', 'label' => 'Disapprove'];
        $this->moduleDataSetup->getConnection()->insertArray(
            $this->moduleDataSetup->getTable('sales_order_status'),
            ['status', 'label'],
            $data
        );
        $this->moduleDataSetup->getConnection()->insertArray(
            $this->moduleDataSetup->getTable('sales_order_status_state'),
            ['status', 'state', 'is_default','visible_on_front'],
            [
                ['approved','processing', '0', '1'],
                ['disapproved', 'pending', '0', '1']
            ]
        );
        $installer->endSetup();
    }

    /**
     * Get dependencies
     */
    public static function getDependencies()
    {
        return [];
    }

    /**
     * Get Aliases
     */
    public function getAliases()
    {
        return [];
    }
}


After that run: php bin/magento setup:upgrade command

Check Order status grid now Stores->Order Status

create custom order status

For technical assistance, please contact us at [email protected]. Additionally, explore a wide range of solutions to enhance your online store’s functionality by visiting the Adobe Commerce extensions page.

If you need professional advice or wish to create bespoke features, consider hiring Adobe Commerce Developers for your project.

Thanks

. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


2 comments

  • Łukasz Bajsarowicz
    • Mahesh Singh (Moderator)
  • Back to Top

    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home