PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.87
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.87
51.1.87 51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 All 41 releases
← All changes | includes/RegisterAssets.php +108 -17 51.1.38 → 51.1.87 View file →
@@ -23,8 +23,11 @@
23 23 // Register styles and scripts for Elementor widgets and features
24 24 self::registerElementorStyles();
25 25 self::registerElementorScripts();
26 26
27 + // Register Pro assets if available
28 + self::registerProAssets();
29 +
27 30 // Register general files
28 31 self::registerLibrariesFiles();
29 32 }
30 33
@@ -47,9 +50,13 @@
47 50 {
48 51 foreach (ModulesMap::getModulesMapArray()['widgets'] as $widget_id => $widget_array) {
49 52 foreach ($widget_array['js'] as $js) {
50 53 $script_handle = KING_ADDONS_ASSETS_UNIQUE_KEY . '-' . $widget_id . '-' . $js;
51 - wp_register_script($script_handle, KING_ADDONS_URL . 'includes/widgets/' . $widget_array['php-class'] . '/' . $js . '.js', array('jquery'), KING_ADDONS_VERSION, true);
54 + $script_deps = array('jquery');
55 + if ('woo-product-variations' === $widget_id) {
56 + $script_deps[] = 'wc-add-to-cart-variation';
57 + }
58 + wp_register_script($script_handle, KING_ADDONS_URL . 'includes/widgets/' . $widget_array['php-class'] . '/' . $js . '.js', $script_deps, KING_ADDONS_VERSION, true);
52 59
53 60 // Localize script specifically for pricing-slider
54 61 if ($widget_id === 'pricing-slider' && $js === 'script') {
55 62 $localized_data = [
@@ -108,9 +115,9 @@
108 115
109 116 if(KING_ADDONS_WGT_FORM_BUILDER) {
110 117 wp_localize_script(KING_ADDONS_ASSETS_UNIQUE_KEY . '-form-builder-script', 'KingAddonsFormBuilderData', [
111 118 'ajaxurl' => admin_url('admin-ajax.php'),
112 - // Security fix: Remove public nonce exposure - generate dynamically in AJAX handlers
119 + 'nonce' => wp_create_nonce('king-addons-js'),
113 120 'input_empty' => esc_html__('Please fill out this field', 'king-addons'),
114 121 'select_empty' => esc_html__('Nothing selected', 'king-addons'),
115 122 'file_empty' => esc_html__('Please upload a file', 'king-addons'),
116 123 'recaptcha_v3_site_key' => get_option('king_addons_recaptcha_v3_site_key'),
@@ -117,22 +124,8 @@
117 124 'recaptcha_error' => esc_html__('Recaptcha Error', 'king-addons'),
118 125 ]);
119 126 }
120 127
121 - // Localize form builder script - Security fix: Remove public nonce exposure
122 - if (KING_ADDONS_WGT_FORM_BUILDER) {
123 - wp_localize_script(KING_ADDONS_ASSETS_UNIQUE_KEY . '-form-builder-script', 'king_addons_form_builder_vars', [
124 - 'ajax_url' => admin_url('admin-ajax.php'),
125 - // Security fix: Remove public nonce exposure - generate dynamically in AJAX handlers
126 - 'required_text' => esc_html__('This field is required', 'king-addons'),
127 - 'email_text' => esc_html__('Enter a valid email', 'king-addons'),
128 - 'select_empty' => esc_html__('Nothing selected', 'king-addons'),
129 - 'file_empty' => esc_html__('Please upload a file', 'king-addons'),
130 - 'recaptcha_v3_site_key' => get_option('king_addons_recaptcha_v3_site_key'),
131 - 'recaptcha_error' => esc_html__('Recaptcha Error', 'king-addons'),
132 - ]);
133 - }
134 -
135 128 foreach (ModulesMap::getModulesMapArray()['features'] as $feature_id => $feature_array) {
136 129 foreach ($feature_array['js'] as $js) {
137 130 wp_register_script(KING_ADDONS_ASSETS_UNIQUE_KEY . '-' . $feature_id . '-' . $js, KING_ADDONS_URL . 'includes/features/' . $feature_array['php-class'] . '/' . $js . '.js', null, KING_ADDONS_VERSION);
138 131 }
@@ -143,14 +136,41 @@
143 136 * Register libraries files
144 137 */
145 138 function registerLibrariesFiles(): void
146 139 {
140 + $jquery_libraries = [
141 + 'grid',
142 + 'isotope',
143 + 'slick',
144 + 'lightgallery',
145 + 'infinitescroll',
146 + 'imagesloaded',
147 + 'jqueryeventmove',
148 + 'jquerynumerator',
149 + 'jarallax',
150 + 'flipclock',
151 + 'fullpage',
152 + 'marquee',
153 + 'parallax',
154 + 'perfectscrollbar',
155 + 'wpcolorpicker',
156 + 'aos',
157 + ];
158 +
147 159 foreach (LibrariesMap::getLibrariesMapArray()['libraries'] as $library_id => $library_array) {
148 160 foreach ($library_array['css'] as $css) {
149 161 wp_register_style(KING_ADDONS_ASSETS_UNIQUE_KEY . '-' . $library_id . '-' . $css, KING_ADDONS_URL . 'includes/assets/libraries/' . $library_id . '/' . $css . '.css', null, KING_ADDONS_VERSION);
150 162 }
151 163 foreach ($library_array['js'] as $js) {
152 - wp_register_script(KING_ADDONS_ASSETS_UNIQUE_KEY . '-' . $library_id . '-' . $js, KING_ADDONS_URL . 'includes/assets/libraries/' . $library_id . '/' . $js . '.js', null, KING_ADDONS_VERSION);
164 + $dependencies = in_array($library_id, $jquery_libraries, true) ? ['jquery'] : [];
165 +
166 + wp_register_script(
167 + KING_ADDONS_ASSETS_UNIQUE_KEY . '-' . $library_id . '-' . $js,
168 + KING_ADDONS_URL . 'includes/assets/libraries/' . $library_id . '/' . $js . '.js',
169 + $dependencies,
170 + KING_ADDONS_VERSION,
171 + true
172 + );
153 173 }
154 174 }
155 175
156 176 wp_localize_script(KING_ADDONS_ASSETS_UNIQUE_KEY . '-grid-grid', 'KingAddonsGridData', [
@@ -161,8 +181,79 @@
161 181 'comparePageURL' => get_permalink(get_option('king_addons_compare_page')),
162 182 'wishlistPageURL' => get_permalink(get_option('king_addons_wishlist_page')),
163 183 ]);
164 184
185 + }
186 +/**
187 + * Register Pro widget assets when premium is available
188 + */
189 + function registerProAssets(): void
190 + {
191 + // Only register Pro assets if Freemius premium is available
192 + if (
193 + !function_exists('king_addons_freemius') ||
194 + !king_addons_freemius()->can_use_premium_code__premium_only() ||
195 + !defined('KING_ADDONS_PRO_PATH') ||
196 + !defined('KING_ADDONS_PRO_URL')
197 + ) {
198 + return;
199 + }
200 +
201 + // In Elementor editor/preview we want instant reflection of changes,
202 + // even when WP_DEBUG/SCRIPT_DEBUG are off (browser cache is aggressive).
203 + $is_elementor_edit_or_preview = false;
204 + if (defined('ELEMENTOR_VERSION') && class_exists('\\Elementor\\Plugin')) {
205 + try {
206 + $elementor = \Elementor\Plugin::$instance;
207 + $is_elementor_edit_or_preview = (
208 + (isset($elementor->editor) && method_exists($elementor->editor, 'is_edit_mode') && $elementor->editor->is_edit_mode())
209 + || (isset($elementor->preview) && method_exists($elementor->preview, 'is_preview_mode') && $elementor->preview->is_preview_mode())
210 + );
211 + } catch (\Throwable $e) {
212 + $is_elementor_edit_or_preview = false;
213 + }
214 + }
215 +
216 + // Register Pro assets for widgets that have Pro versions
217 + foreach (ModulesMap::getModulesMapArray()['widgets'] as $widget_id => $widget_array) {
218 + if (empty($widget_array['has-pro'])) {
219 + continue;
220 + }
221 +
222 + $widget_class = $widget_array['php-class'];
223 + $pro_widget_dir = KING_ADDONS_PRO_PATH . 'includes/widgets/' . $widget_class . '_Pro/';
224 +
225 + // Register Pro CSS if exists
226 + $pro_css_path = $pro_widget_dir . 'style.css';
227 + if (file_exists($pro_css_path)) {
228 + $use_filemtime = $is_elementor_edit_or_preview || (defined('WP_DEBUG') && WP_DEBUG) || (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG);
229 + $pro_css_ver = ($use_filemtime && function_exists('filemtime'))
230 + ? (string) filemtime($pro_css_path)
231 + : (defined('KING_ADDONS_PRO_VERSION') ? KING_ADDONS_PRO_VERSION : KING_ADDONS_VERSION);
232 + wp_register_style(
233 + KING_ADDONS_ASSETS_UNIQUE_KEY . '-' . $widget_id . '-pro-style',
234 + KING_ADDONS_PRO_URL . 'includes/widgets/' . $widget_class . '_Pro/style.css',
235 + null,
236 + $pro_css_ver
237 + );
238 + }
239 +
240 + // Register Pro JS if exists
241 + $pro_js_path = $pro_widget_dir . 'script.js';
242 + if (file_exists($pro_js_path)) {
243 + $use_filemtime = $is_elementor_edit_or_preview || (defined('WP_DEBUG') && WP_DEBUG) || (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG);
244 + $pro_js_ver = ($use_filemtime && function_exists('filemtime'))
245 + ? (string) filemtime($pro_js_path)
246 + : (defined('KING_ADDONS_PRO_VERSION') ? KING_ADDONS_PRO_VERSION : KING_ADDONS_VERSION);
247 + wp_register_script(
248 + KING_ADDONS_ASSETS_UNIQUE_KEY . '-' . $widget_id . '-pro-script',
249 + KING_ADDONS_PRO_URL . 'includes/widgets/' . $widget_class . '_Pro/script.js',
250 + array('jquery'),
251 + $pro_js_ver,
252 + true
253 + );
254 + }
255 + }
165 256 }
166 257 }
167 258
168 259 RegisterAssets::instance();