How to Create Custom Order Attribute in Magento 2 and Show it in Admin Grid
Do you want to add a custom order attribute to the Magento 2 admin grid? Read this tutorial to learn the step-by-step method to create custom order attribute in Magento 2 and show it in the admin grid.
Businesses use order information to manage & fulfill online orders efficiently. Order details such as shipping address and payment status make it easy to process online orders. The default Magento 2 displays such essential order information in the Sales > Orders backend grid, making it easy for the merchants to manage & process the orders. Furthermore, the Magento order status & states make the process easier.
Creating a custom order attribute in Magento 2 and showing it in the admin grid can make order processing more efficient as you scale your business. Also You add category attribute to custom attribute group in Magento 2 will help you integrating a third-party API and using a category attribute! You can follow the steps in this blog post to create a custom attribute in Magento 2 & show it in the admin grid.
Method to Create Custom Order Attribute in Magento 2 and Show it in Admin Grid
In order to create a custom order attribute in Magento 2, we will create a custom module and a UpgradeData file and save the custom attribute using an observer. Lastly, we’ll update the sales_order_grid.xml file to show the custom attribute in Magento 2 order grid.
Let’s see how to do it using an example. Create the following files in Magento 2:
- Vendor_Module/etc/module.xml
12345678<?xml version="1.0" ?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"><module name="vendor_module" setup_version="1.0.0"><sequence><module name="Magento_Sales"/></sequence></module></config> - Vendor_Module/Setup/UpgradeData.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546<?phpnamespace Vendor\Module\Setup;use Magento\Framework\Setup\ModuleContextInterface;use Magento\Framework\Setup\ModuleDataSetupInterface;use Magento\Framework\Setup\UpgradeDataInterface;use Magento\Sales\Setup\SalesSetupFactory;class UpgradeData implements UpgradeDataInterface{private $salesSetupFactory;/*** Constructor** @param \Magento\Sales\Setup\SalesSetupFactory $salesSetupFactory*/public function __construct(SalesSetupFactory $salesSetupFactory){$this->salesSetupFactory = $salesSetupFactory;}/*** {@inheritdoc}*/public function upgrade(ModuleDataSetupInterface $setup,ModuleContextInterface $context) {if (version_compare($context->getVersion(), "1.0.1", "<")) {$salesSetup = $this->salesSetupFactory->create(['setup' => $setup]);$salesSetup->addAttribute('order','checkmo_cash_info',['type' => 'varchar','length' => 100,'visible' => false,'required' => false,'grid' => true]);}}} - Vendor_Module/etc/events.xml
123456<?xml version="1.0" ?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"><event name="sales_order_save_after"><observer instance="Vendor\Module\Observer\Sales\OrderSaveAfter" name="ordersmodification_observer_sales_ordersaveafter_sales_order_save_after"/></event></config>
- Vendor_Module/Observer/Sales/OrderSaveAfter.php
123456789101112131415161718192021222324252627282930313233343536373839<?phpnamespace Vendor\Module\Observer\Sales;class OrderSaveAfter implements \Magento\Framework\Event\ObserverInterface{/*** @var \Magento\Catalog\Model\ProductRepository*/protected $productRepository;public function __construct(\Psr\Log\LoggerInterface $logger,\Magento\Catalog\Model\ProductRepository $productRepository) {$this->logger = $logger;$this->productRepository = $productRepository;}/*** Execute observer** @param \Magento\Framework\Event\Observer $observer* @return void* @throws \Magento\Framework\Exception\NoSuchEntityException*/public function execute(\Magento\Framework\Event\Observer $observer) {$order= $observer->getData('order');if(isset($postData['payment']['ckm_cash_number'])){$order->setCheckmoCashInfo('y');}$order->save();}}
- Vendor_Module/etc/di.xml
1234567891011<?xml version="1.0"?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"><!--Sync the sales_order table and sales_order_grid--><virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid"><arguments><argument name="columns" xsi:type="array"><item name="checkmo_cash_info" xsi:type="string">sales_order.checkmo_cash_info</item></argument></arguments></virtualType></config>
- Vendor_Module/view/adminhtml/ui_component/sales_order_columns.xml
1234567891011121314<?xml version="1.0" encoding="UTF-8"?><listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"><columns name="sales_order_columns"><column name="checkmo_cash_info"><argument name="data" xsi:type="array"><item name="config" xsi:type="array"><item name="filter" xsi:type="string">textRange</item><item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item><item name="label" xsi:type="string" translate="true">checkmo Cash Information</item></item></argument></column></columns></listing>
Yeahhh…!
The custom order attribute will be created and displayed in the admin order grid in Magento 2. You can also learn Magento 2 create order in admin Panel to assist your customer in placing order when they require.
You can use the above code to create a custom order attribute in Magento 2 and show it in the admin grid as per your requirement & put your own logic. Try the solution & comment down your thoughts.
Don’t you think this solution deserves a five-star rating? 🤩
🙃 Help us spread the Magento knowledge. Share this blog post on social media & online forums. 🙃
Related Read: Create Custom Product Attribute Using Data Patch in Magento 2
Thanks for reading…! 🍀
Sanjay 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.
Prev
How to Import Customers to Shopify Using CSV
25+ Key Google Analytics Statistics That Matter [2024]
Next