Magento 2 How to Add a New Column to Admin Orders Grid View Page

Hello Guys! 👋

In this blog, we are going to learn how we can add new column to admin orders grid view page.

Step 1: Create a sales_order_grid.xml file as given below path

app\code\Vendor\Extension\view\adminhtml\ui_component\

<?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="coupon_code" class="Vendor\Extension\Ui\Component\Listing\Column\Couponcode">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="filter" xsi:type="string">text</item>
                    <item name="label" xsi:type="string" translate="true">Coupon Code</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>
Step 2: Create a Couponcode.php file as given below path.

app\code\Vendor\Extension\Ui\Component\Listing\Column\

<?php
namespace Vendor\Extension\Ui\Component\Listing\Column;

use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Ui\Component\Listing\Columns\Column;
use Magento\Framework\Api\SearchCriteriaBuilder;

class Couponcode extends Column
{
    protected $_orderRepository;
    protected $_searchCriteria;

    public function __construct(
        ContextInterface $context,
        UiComponentFactory $uiComponentFactory,
        OrderRepositoryInterface $orderRepository,
        SearchCriteriaBuilder $criteria,
        array $components = [],
        array $data = []
    ) 
    {
        $this->_orderRepository = $orderRepository;
        $this->_searchCriteria  = $criteria;
        parent::__construct($context, $uiComponentFactory, $components, $data);
    }

    public function prepareDataSource(array $dataSource)
    {
        if (isset($dataSource['data']['items'])) {
            foreach ($dataSource['data']['items'] as & $item) {

                $order  = $this->_orderRepository->get($item["entity_id"]);
                $coupon_code = $order->getData("coupon_code"); // replace your order custom column to show data on grid.

                $item[$this->getData('name')] = $coupon_code;
            }
        }
        
        return $dataSource;
    }

}

Hope! It will help you

Thank you 😊

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 18

No votes so far! Be the first to rate this post.

Author

Mahesh Gohil

Leave a Reply

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