Today i am explaining how to create custom widget type in Magento 2.
To create widget firstly need to create widget.xml in app/code/Namespace/Module/etc/ folder.
<?xml version="1.0"?> <widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../Magento/Widget/etc/widget.xsd"> <widget id="wk_customwidget" class="Webkul\CustomWidget\Block\CustomWidget"> <label translate="true">Custom Widget</label> <description>Widget for example</description> <parameters> <parameter name="test_desc" xsi:type="text" required="true" visible="true" sort_order="0" > <label translate="true">Description</label> <description>Text type option</description> </parameter> <parameter name="test_select" xsi:type="select" required="true" source_model="Webkul\CustomWidget\Model\Config\Source\Select" visible="true" sort_order="8" > <label translate="true">Select option</label> <description>Select type option</description> </parameter> </parameters> </widget> </widgets>
Here, Widget id: wk_customwidget, you can defined as per your choice.
Class attribute: in this you need to add a block class which uses in your widget.
label and description tags for the widget explanation.
In the parameter tag we added 2 type of fields:
1: text type, you can add text values.
2: select type: to select option values, for this you need to define values in model.
Model file for the select options at path: Webkul\CustomWidget\Model\Config\Source\Select.php
will have code like:
<?php namespace Webkul\CustomWidget\Model\Config\Source; class Select implements \Magento\Framework\Option\ArrayInterface { public function toOptionArray() { return [ ['value' => 'yes', 'label' => __('Yes')], ['value' => 'no', 'label' => __('No')] ]; } }
By this code, there are two option will appear with Yes and No values.
Now Create block which is defined in widget.xml
Block file at path Webkul\CustomWidget\Block\CustomWidget.php
<?php namespace Webkul\CustomWidget\Block; use Magento\Framework\View\Element\Template; use Magento\Framework\App\Config\ScopeConfigInterface; class CustomWidget extends \Magento\Framework\View\Element\Template implements \Magento\Widget\Block\BlockInterface { /** * construct description * @param MagentoFrameworkViewElementTemplateContext $context * $data[] */ public function __construct( \Magento\Framework\View\Element\Template\Context $context, array $data = [] ) { parent::__construct($context, $data); } /** * construct function */ protected function _construct() { parent::_construct(); $this->setTemplate('custom_widget.phtml'); } public function getDescription() { $desc = $this->getData('test_desc'); //it will return your description which is added in your widget } public function getSelectValue() { return $this->getData('test_select'); //will return select option value } }
Here, you can set your custom template in $this->setTemplate() function.
In block i created two functions to get values which i added at time of adding widget.
After these files, you will get a new widget type with custom fields.


You can add this widget on any page, and use widget’s data through your block.
I hope this blog will help you with Create Custom Widget type in Magento 2. You may also check our wide range of best Magento 2 Extensions.
Please reach out to our team via a support ticket if you have any queries.
Try this and if you have any queries then just comment below 🙂
Be the first to comment.