# Simple Example
Elementor Pro AdvancedTo demonstrate how easy it is to create new form actions, we're going to create an addon which will ping an external server.
# Folder Structure
The addon will have two files. One file for the new form action and a main file to register the action and handle all the other stuff.
elementor-forms-ping-action/
|
├─ form-actions/
| └─ ping.php
|
└─ elementor-forms-ping-action.php
1
2
3
4
5
6
2
3
4
5
6
# Plugin Files
elementor-forms-ping-action.php
<?php
/**
* Plugin Name: Elementor Forms Ping Action
* Description: Custom addon which will ping an external server.
* Plugin URI: https://elementor.com/
* Version: 1.0.0
* Author: Elementor Developer
* Author URI: https://developers.elementor.com/
* Text Domain: elementor-forms-ping-action
*
* Requires Plugins: elementor
* Elementor tested up to: 3.24.0
* Elementor Pro tested up to: 3.24.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Add new form action after form submission.
*
* @since 1.0.0
* @param ElementorPro\Modules\Forms\Registrars\Form_Actions_Registrar $form_actions_registrar
* @return void
*/
function add_new_ping_action( $form_actions_registrar ) {
include_once( __DIR__ . '/form-actions/ping.php' );
$form_actions_registrar->register( new \Ping_Action_After_Submit() );
}
add_action( 'elementor_pro/forms/actions/register', 'add_new_ping_action' );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
form-actions/ping.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Elementor form ping action.
*
* Custom Elementor form action which will ping an external server.
*
* @since 1.0.0
*/
class Ping_Action_After_Submit extends \ElementorPro\Modules\Forms\Classes\Action_Base {
/**
* Get action name.
*
* Retrieve ping action name.
*
* @since 1.0.0
* @access public
* @return string
*/
public function get_name(): string {
return 'ping';
}
/**
* Get action label.
*
* Retrieve ping action label.
*
* @since 1.0.0
* @access public
* @return string
*/
public function get_label(): string {
return esc_html__( 'Ping', 'elementor-forms-ping-action' );
}
/**
* Run action.
*
* Ping an external server after form submission.
*
* @since 1.0.0
* @access public
* @param \ElementorPro\Modules\Forms\Classes\Form_Record $record
* @param \ElementorPro\Modules\Forms\Classes\Ajax_Handler $ajax_handler
*/
public function run( $record, $ajax_handler ): void {
wp_remote_post(
'https://api.example.com/',
[
'method' => 'GET',
'headers' => [
'Content-Type' => 'application/json',
],
'body' => wp_json_encode([
'site' => get_home_url(),
'action' => 'Form submitted',
]),
'httpversion' => '1.0',
'timeout' => 60,
]
);
}
/**
* Register action controls.
*
* Ping action has no input fields to the form widget.
*
* @since 1.0.0
* @access public
* @param \Elementor\Widget_Base $widget
*/
public function register_settings_section( $widget ): void {}
/**
* On export.
*
* Ping action has no fields to clear when exporting.
*
* @since 1.0.0
* @access public
* @param array $element
*/
public function on_export( $element ): array {}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# The Result
The new "Ping" action inside the "Action After Submit" section: