How to create a custom Elementor Addon?
First of all we need to register the widgets. Let’s start a simple Elementor addon that adds a widgets to Elementor. The addon path will be your site’s wp-content/plugins/
folder with the folder structure as follows:
elementor-addon/
|
├─ widgets/
| hello-world-widget.php
|
└─ elementor-addon.php
This widget will require mainly these files: 1. elementor-addon.php, 2. hello-world-widget.php
elementor-addon.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/
* Text Domain: elementor-addon
*
* Requires Plugins: elementor
* Elementor tested up to: 3.21.0
* Elementor Pro tested up to: 3.21.0
*/
function register_hello_world_widget( $widgets_manager ) {
require_once( __DIR__ . '/widgets/hello-world-widget.php' );
$widgets_manager->register( new \Elementor_Hello_World_Widget() );
}
add_action( 'elementor/widgets/register', 'register_hello_world_widget' );
This is the widget file — hello-world-widget.php . It creates the controls in the widget panel and allows the user to add custom text and style with a custom color.
<?php
class Elementor_Hello_World_Widget_2 extends \Elementor\Widget_Base {
public function get_name() {
return 'hello_world_widget';
}
public function get_title() {
return esc_html__( 'Hello World!', '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();
if ( empty( $settings['title'] ) ) {
return;
}
?>
<p class="hello-world">
<?php echo $settings['title']; ?>
</p>
<?php
}
protected function content_template() {
?>
<#
if ( '' === settings.title ) {
return;
}
#>
<p class="hello-world">
{{ settings.title }}
</p>
<?php
}
}