The free version of Elementor out of the box has a lot of great widgets, which are enough for the average user, but what to do when you need to create a unique widget for your project. Not a problem! Creating a widget for Elementor is not difficult, although basic knowledge php still needed. Let’s get started.
All the necessary documentation for developers can be found in the official documentation of the plugin – https://developers.elementor.com/docs/addons/addon-example/
Let’s start with a simple plugin. Let’s call our plugin elementor-widget and place it in a directory /wp-content/plugins/elementor-widget. In the widget folder, create a new file and name it elementor-widget.php
Put the following code in a file elementor-widget.php
<?php /** * Plugin Name: Elementor Addon * Description: Simple hello world widgets for Elementor. * Version: 1.0.0 * Author: Elementor Developer * Author URI: https://developers.elementor.com/ */ function register_hello_world_widget( $widgets_manager ) { require_once( __DIR__ . '/widgets/widget-2.php' ); //the path to the code of our widget $widgets_manager->register( new \Elementor_Hello_World_Widget_2() ); } add_action( 'elementor/widgets/register', 'register_hello_world_widget' );
In the directory /wp-content/plugins/elementor-widget create a new folder widgets.
Create in widgets a new file with the name widget-2.php
Put the following code in a file widget-2.php
<?php class Elementor_Hello_World_Widget_2 extends \Elementor\Widget_Base { public function get_name() { return 'hello_world_widget_2'; } public function get_title() { return esc_html__( 'Hello World 2', 'elementor-addon' ); } public function get_icon() { return 'eicon-code'; } public function get_categories() { return [ 'basic' ]; } public function get_keywords() { return [ 'hello', 'world' ]; } protected function register_controls() { // Content Tab Start $this->start_controls_section( 'section_title', [ 'label' => esc_html__( 'Title', 'elementor-addon' ), 'tab' => \Elementor\Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'title', [ 'label' => esc_html__( 'Title', 'elementor-addon' ), 'type' => \Elementor\Controls_Manager::TEXTAREA, 'default' => esc_html__( 'Hello world', 'elementor-addon' ), ] ); $this->end_controls_section(); // Content Tab End // Style Tab Start $this->start_controls_section( 'section_title_style', [ 'label' => esc_html__( 'Title', 'elementor-addon' ), 'tab' => \Elementor\Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'title_color', [ 'label' => esc_html__( 'Text Color', 'elementor-addon' ), 'type' => \Elementor\Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .hello-world' => 'color: {{VALUE}};', ], ] ); $this->end_controls_section(); // Style Tab End } protected function render() { $settings = $this->get_settings_for_display(); ?> <p class="hello-world"> <?php echo $settings['title']; ?> </p> <?php } }