PluginProbe
Elementor Website Builder – more than just a page builder / 3.25.8
Elementor Website Builder – more than just a page builder v3.25.8
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / modules / element-cache / module.php

module.php in Elementor Website Builder – more than just a page builder 3.25.8, at modules/element-cache/module.php

160 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\Modules\ElementCache;
3
4 use Elementor\Controls_Manager;
5 use Elementor\Core\Base\Module as BaseModule;
6 use Elementor\Core\Experiments\Manager as ExperimentsManager;
7 use Elementor\Element_Base;
8 use Elementor\Plugin;
9 use Elementor\Settings;
10
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit; // Exit if accessed directly.
13 }
14
15 class Module extends BaseModule {
16
17 public function get_name() {
18 return 'element-cache';
19 }
20
21 public function __construct() {
22 parent::__construct();
23
24 $this->register_experiments();
25 $this->register_shortcode();
26
27 if ( ! Plugin::$instance->experiments->is_feature_active( 'e_element_cache' ) ) {
28 return;
29 }
30
31 $this->add_advanced_tab_actions();
32
33 if ( is_admin() ) {
34 add_action( 'elementor/admin/after_create_settings/' . Settings::PAGE_ID, [ $this, 'register_admin_fields' ], 100 );
35 }
36
37 $this->clear_cache_on_site_changed();
38 }
39
40 private function register_experiments() {
41 Plugin::$instance->experiments->add_feature( [
42 'name' => 'e_element_cache',
43 'title' => esc_html__( 'Element Caching', 'elementor' ),
44 'tag' => esc_html__( 'Performance', 'elementor' ),
45 'description' => esc_html__( 'Elements caching reduces loading times by serving up a copy of an element instead of rendering it fresh every time the page is loaded. When active, Elementor will determine which elements can benefit from static loading - but you can override this.', 'elementor' ),
46 'release_status' => ExperimentsManager::RELEASE_STATUS_BETA,
47 'default' => ExperimentsManager::STATE_INACTIVE,
48 'new_site' => [
49 'default_active' => true,
50 'minimum_installation_version' => '3.23.0',
51 ],
52 'generator_tag' => true,
53 ] );
54 }
55
56 private function register_shortcode() {
57 add_shortcode( 'elementor-element', function ( $atts ) {
58 if ( empty( $atts['data'] ) ) {
59 return '';
60 }
61
62 $widget_data = json_decode( base64_decode( $atts['data'] ), true );
63
64 if ( empty( $widget_data ) || ! is_array( $widget_data ) ) {
65 return '';
66 }
67
68 ob_start();
69
70 $element = Plugin::$instance->elements_manager->create_element_instance( $widget_data );
71
72 if ( $element ) {
73 $element->print_element();
74 }
75
76 return ob_get_clean();
77 } );
78 }
79
80 private function add_advanced_tab_actions() {
81 $hooks = array(
82 'elementor/element/common/_section_style/after_section_end' => '_css_classes', // Widgets
83 );
84
85 foreach ( $hooks as $hook => $injection_position ) {
86 add_action(
87 $hook,
88 function( $element, $args ) use ( $injection_position ) {
89 $this->add_control_to_advanced_tab( $element, $args, $injection_position );
90 },
91 10,
92 2
93 );
94 }
95 }
96
97 private function add_control_to_advanced_tab( Element_Base $element, $args, $injection_position ) {
98 $element->start_injection(
99 [
100 'of' => $injection_position,
101 ]
102 );
103
104 $control_data = [
105 'label' => esc_html__( 'Cache Settings', 'elementor' ),
106 'type' => Controls_Manager::SELECT,
107 'default' => '',
108 'options' => [
109 '' => esc_html__( 'Default', 'elementor' ),
110 'yes' => esc_html__( 'Inactive', 'elementor' ),
111 'no' => esc_html__( 'Active', 'elementor' ),
112 ],
113 ];
114
115 $element->add_control( '_element_cache', $control_data );
116
117 $element->end_injection();
118 }
119
120 public function register_admin_fields( Settings $settings ) {
121 $settings->add_field(
122 Settings::TAB_PERFORMANCE,
123 Settings::TAB_PERFORMANCE,
124 'element_cache_ttl',
125 [
126 'label' => esc_html__( 'Element Cache Expiration', 'elementor' ),
127 'field_args' => [
128 'class' => 'elementor-element-cache-ttl',
129 'type' => 'select',
130 'std' => '24',
131 'options' => [
132 '1' => esc_html__( '1 Hour', 'elementor' ),
133 '6' => esc_html__( '6 Hours', 'elementor' ),
134 '12' => esc_html__( '12 Hours', 'elementor' ),
135 '24' => esc_html__( '1 Day', 'elementor' ),
136 '72' => esc_html__( '3 Days', 'elementor' ),
137 '168' => esc_html__( '1 Week', 'elementor' ),
138 '336' => esc_html__( '2 Weeks', 'elementor' ),
139 '720' => esc_html__( '1 Month', 'elementor' ),
140 '8760' => esc_html__( '1 Year', 'elementor' ),
141 ],
142 'desc' => esc_html__( 'Specify the duration for which data is stored in the cache. Elements caching speeds up loading by serving pre-rendered copies of elements, rather than rendering them fresh each time. This control ensures efficient performance and up-to-date content.', 'elementor' ),
143 ],
144 ]
145 );
146 }
147
148 private function clear_cache_on_site_changed() {
149 add_action( 'activated_plugin', [ $this, 'clear_cache' ] );
150 add_action( 'deactivated_plugin', [ $this, 'clear_cache' ] );
151 add_action( 'switch_theme', [ $this, 'clear_cache' ] );
152 add_action( 'upgrader_process_complete', [ $this, 'clear_cache' ] );
153 }
154
155 public function clear_cache() {
156 Plugin::$instance->files_manager->clear_cache();
157
158 }
159 }
160