PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.83
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.83
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 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / extensions / Site_Preloader / templates / partials / tab-rules.php

tab-rules.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.83, at includes/extensions/Site_Preloader/templates/partials/tab-rules.php

418 lines 28.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Site Preloader Rules Tab - Redesigned for better UX.
4 *
5 * @package King_Addons
6 * @since 1.0.0
7 *
8 * @var array $settings Current settings.
9 * @var bool $is_pro Whether Pro version is active.
10 * @var array $presets Available presets.
11 * @var array $rules Current display rules.
12 */
13
14 if (!defined('ABSPATH')) {
15 exit;
16 }
17
18 $max_free_rules = 3;
19 $can_add_rule = $is_pro || count($rules) < $max_free_rules;
20
21 // Get all pages for dropdown
22 $all_pages = get_pages(['post_status' => 'publish', 'sort_column' => 'post_title']);
23
24 // Get all post types
25 $post_types = get_post_types(['public' => true], 'objects');
26 unset($post_types['attachment']);
27
28 // Condition labels
29 $condition_labels = [
30 'specific_pages' => __('Specific pages', 'king-addons'),
31 'post_type' => __('Post type', 'king-addons'),
32 'front_page' => __('Front page (Home)', 'king-addons'),
33 'blog_page' => __('Blog page', 'king-addons'),
34 'all_posts' => __('All posts', 'king-addons'),
35 'all_pages' => __('All pages', 'king-addons'),
36 'archive' => __('Archive pages', 'king-addons'),
37 'search' => __('Search results', 'king-addons'),
38 '404' => __('404 page', 'king-addons'),
39 'url_contains' => __('URL contains', 'king-addons'),
40 'url_equals' => __('URL equals', 'king-addons'),
41 ];
42 ?>
43
44 <div class="ka-card">
45 <div class="ka-card-header">
46 <span class="dashicons dashicons-filter"></span>
47 <h2><?php esc_html_e('Display Rules', 'king-addons'); ?></h2>
48 <div class="ka-card-header-actions">
49 <?php if ($can_add_rule): ?>
50 <button type="button" class="ka-btn ka-btn-primary ka-btn-sm" id="ka-add-rule-btn">
51 <span class="dashicons dashicons-plus-alt2"></span>
52 <?php esc_html_e('Add Rule', 'king-addons'); ?>
53 </button>
54 <?php else: ?>
55 <button type="button" class="ka-btn ka-btn-secondary ka-btn-sm" disabled>
56 <span class="dashicons dashicons-lock"></span>
57 <?php esc_html_e('Upgrade for more rules', 'king-addons'); ?>
58 </button>
59 <?php endif; ?>
60 </div>
61 </div>
62 <div class="ka-card-body">
63 <p class="ka-preloader-rules-intro">
64 <?php esc_html_e('Control where the preloader appears. Rules are checked in order — first matching rule wins.', 'king-addons'); ?>
65 </p>
66
67 <div class="ka-preloader-rules-list" id="ka-rules-list">
68 <?php if (empty($rules)): ?>
69 <div class="ka-empty" id="ka-rules-empty">
70 <span class="dashicons dashicons-filter"></span>
71 <p><?php esc_html_e('No display rules yet.', 'king-addons'); ?></p>
72 <p class="ka-empty-hint"><?php esc_html_e('By default, preloader shows on all pages. Add rules to customize this behavior.', 'king-addons'); ?></p>
73 </div>
74 <?php else: ?>
75 <?php foreach ($rules as $index => $rule):
76 $action = $rule['action'] ?? 'show';
77 $condition = $rule['condition'] ?? 'specific_pages';
78 $condition_value = $rule['condition_value'] ?? '';
79 $template = $rule['template'] ?? '';
80 $selected_pages = $rule['pages'] ?? [];
81
82 // Build readable description
83 $desc_condition = $condition_labels[$condition] ?? $condition;
84
85 // For pages, show page titles
86 $desc_value = $condition_value;
87 if ($condition === 'specific_pages' && !empty($selected_pages)) {
88 $page_titles = [];
89 foreach ($selected_pages as $page_id) {
90 $page = get_post($page_id);
91 if ($page) {
92 $page_titles[] = $page->post_title;
93 }
94 }
95 $desc_value = implode(', ', array_slice($page_titles, 0, 3));
96 if (count($page_titles) > 3) {
97 $desc_value .= ' +' . (count($page_titles) - 3) . ' more';
98 }
99 }
100 ?>
101 <div class="ka-preloader-rule-item <?php echo empty($rule['enabled']) ? 'ka-rule-disabled' : ''; ?>" data-rule-id="<?php echo esc_attr($rule['id']); ?>">
102 <div class="ka-preloader-rule-item__header">
103 <label class="ka-toggle ka-toggle-sm">
104 <input type="checkbox" class="ka-rule-enabled" <?php checked(!empty($rule['enabled'])); ?> />
105 <span class="ka-toggle-slider"></span>
106 </label>
107 <div class="ka-preloader-rule-item__summary">
108 <span class="ka-rule-action ka-rule-action--<?php echo esc_attr($action); ?>">
109 <?php
110 if ($action === 'show') {
111 echo '<span class="dashicons dashicons-visibility"></span> ' . esc_html__('Show', 'king-addons');
112 } elseif ($action === 'hide') {
113 echo '<span class="dashicons dashicons-hidden"></span> ' . esc_html__('Hide', 'king-addons');
114 } else {
115 echo '<span class="dashicons dashicons-admin-customizer"></span> ' . esc_html__('Override', 'king-addons');
116 }
117 ?>
118 </span>
119 <span class="ka-rule-on"><?php esc_html_e('on', 'king-addons'); ?></span>
120 <span class="ka-rule-condition"><?php echo esc_html($desc_condition); ?></span>
121 <?php if ($desc_value): ?>
122 <span class="ka-rule-value"><?php echo esc_html($desc_value); ?></span>
123 <?php endif; ?>
124 <?php if ($action === 'override' && $template): ?>
125 <span class="ka-rule-template-badge"> <?php echo esc_html($presets[$template]['title'] ?? $template); ?></span>
126 <?php endif; ?>
127 </div>
128 <div class="ka-preloader-rule-item__actions">
129 <button type="button" class="ka-btn-icon ka-rule-edit-btn" title="<?php esc_attr_e('Edit', 'king-addons'); ?>">
130 <span class="dashicons dashicons-edit"></span>
131 </button>
132 <button type="button" class="ka-btn-icon ka-rule-delete-btn" title="<?php esc_attr_e('Delete', 'king-addons'); ?>">
133 <span class="dashicons dashicons-trash"></span>
134 </button>
135 </div>
136 </div>
137 <div class="ka-preloader-rule-item__details" style="display: none;">
138 <div class="ka-rule-form">
139 <!-- Action -->
140 <div class="ka-rule-form-row">
141 <label class="ka-rule-form-label"><?php esc_html_e('Action', 'king-addons'); ?></label>
142 <div class="ka-rule-form-field">
143 <div class="ka-btn-group ka-rule-action-btns">
144 <button type="button" class="ka-btn ka-btn-sm <?php echo $action === 'show' ? 'active' : ''; ?>" data-action="show">
145 <span class="dashicons dashicons-visibility"></span>
146 <?php esc_html_e('Show', 'king-addons'); ?>
147 </button>
148 <button type="button" class="ka-btn ka-btn-sm <?php echo $action === 'hide' ? 'active' : ''; ?>" data-action="hide">
149 <span class="dashicons dashicons-hidden"></span>
150 <?php esc_html_e('Hide', 'king-addons'); ?>
151 </button>
152 <button type="button" class="ka-btn ka-btn-sm <?php echo $action === 'override' ? 'active' : ''; ?>" data-action="override">
153 <span class="dashicons dashicons-admin-customizer"></span>
154 <?php esc_html_e('Override', 'king-addons'); ?>
155 </button>
156 </div>
157 <input type="hidden" class="ka-rule-action" value="<?php echo esc_attr($action); ?>" />
158 </div>
159 </div>
160
161 <!-- Template (only for override action) -->
162 <div class="ka-rule-form-row ka-rule-template-row" style="<?php echo $action !== 'override' ? 'display:none;' : ''; ?>">
163 <label class="ka-rule-form-label"><?php esc_html_e('Template', 'king-addons'); ?></label>
164 <div class="ka-rule-form-field">
165 <select class="ka-rule-template">
166 <?php foreach ($presets as $preset_id => $preset):
167 if (!empty($preset['pro']) && !$is_pro) continue;
168 ?>
169 <option value="<?php echo esc_attr($preset_id); ?>" <?php selected($template, $preset_id); ?>>
170 <?php echo esc_html($preset['title']); ?>
171 </option>
172 <?php endforeach; ?>
173 </select>
174 </div>
175 </div>
176
177 <!-- Condition -->
178 <div class="ka-rule-form-row">
179 <label class="ka-rule-form-label"><?php esc_html_e('Where', 'king-addons'); ?></label>
180 <div class="ka-rule-form-field">
181 <select class="ka-rule-condition">
182 <optgroup label="<?php esc_attr_e('Pages', 'king-addons'); ?>">
183 <option value="specific_pages" <?php selected($condition, 'specific_pages'); ?>><?php esc_html_e('Specific pages', 'king-addons'); ?></option>
184 <option value="all_pages" <?php selected($condition, 'all_pages'); ?>><?php esc_html_e('All pages', 'king-addons'); ?></option>
185 <option value="front_page" <?php selected($condition, 'front_page'); ?>><?php esc_html_e('Front page (Home)', 'king-addons'); ?></option>
186 </optgroup>
187 <optgroup label="<?php esc_attr_e('Posts', 'king-addons'); ?>">
188 <option value="all_posts" <?php selected($condition, 'all_posts'); ?>><?php esc_html_e('All posts', 'king-addons'); ?></option>
189 <option value="blog_page" <?php selected($condition, 'blog_page'); ?>><?php esc_html_e('Blog page', 'king-addons'); ?></option>
190 </optgroup>
191 <optgroup label="<?php esc_attr_e('Other', 'king-addons'); ?>">
192 <option value="post_type" <?php selected($condition, 'post_type'); ?>><?php esc_html_e('Custom post type', 'king-addons'); ?></option>
193 <option value="archive" <?php selected($condition, 'archive'); ?>><?php esc_html_e('Archive pages', 'king-addons'); ?></option>
194 <option value="search" <?php selected($condition, 'search'); ?>><?php esc_html_e('Search results', 'king-addons'); ?></option>
195 <option value="404" <?php selected($condition, '404'); ?>><?php esc_html_e('404 page', 'king-addons'); ?></option>
196 </optgroup>
197 <optgroup label="<?php esc_attr_e('URL', 'king-addons'); ?>">
198 <option value="url_contains" <?php selected($condition, 'url_contains'); ?>><?php esc_html_e('URL contains', 'king-addons'); ?></option>
199 <option value="url_equals" <?php selected($condition, 'url_equals'); ?>><?php esc_html_e('URL equals', 'king-addons'); ?></option>
200 </optgroup>
201 </select>
202 </div>
203 </div>
204
205 <!-- Specific Pages selector -->
206 <div class="ka-rule-form-row ka-rule-pages-row" style="<?php echo $condition !== 'specific_pages' ? 'display:none;' : ''; ?>">
207 <label class="ka-rule-form-label"><?php esc_html_e('Select Pages', 'king-addons'); ?></label>
208 <div class="ka-rule-form-field">
209 <select class="ka-rule-pages" multiple="multiple">
210 <?php foreach ($all_pages as $page): ?>
211 <option value="<?php echo esc_attr($page->ID); ?>" <?php echo in_array($page->ID, $selected_pages) ? 'selected' : ''; ?>>
212 <?php echo esc_html($page->post_title); ?>
213 </option>
214 <?php endforeach; ?>
215 </select>
216 <p class="ka-rule-form-hint"><?php esc_html_e('Hold Ctrl/Cmd to select multiple pages', 'king-addons'); ?></p>
217 </div>
218 </div>
219
220 <!-- Post Type selector -->
221 <div class="ka-rule-form-row ka-rule-posttype-row" style="<?php echo $condition !== 'post_type' ? 'display:none;' : ''; ?>">
222 <label class="ka-rule-form-label"><?php esc_html_e('Post Type', 'king-addons'); ?></label>
223 <div class="ka-rule-form-field">
224 <select class="ka-rule-posttype">
225 <?php foreach ($post_types as $pt): ?>
226 <option value="<?php echo esc_attr($pt->name); ?>" <?php selected($condition_value, $pt->name); ?>>
227 <?php echo esc_html($pt->labels->name); ?>
228 </option>
229 <?php endforeach; ?>
230 </select>
231 </div>
232 </div>
233
234 <!-- URL Value input -->
235 <div class="ka-rule-form-row ka-rule-url-row" style="<?php echo !in_array($condition, ['url_contains', 'url_equals']) ? 'display:none;' : ''; ?>">
236 <label class="ka-rule-form-label"><?php esc_html_e('URL Value', 'king-addons'); ?></label>
237 <div class="ka-rule-form-field">
238 <input type="text" class="ka-rule-url-value" value="<?php echo esc_attr($condition_value); ?>" placeholder="<?php esc_attr_e('e.g., /shop/ or checkout', 'king-addons'); ?>" />
239 </div>
240 </div>
241
242 <!-- Override colors (only for override action) -->
243 <div class="ka-rule-form-row ka-rule-colors-toggle-row" style="<?php echo $action !== 'override' ? 'display:none;' : ''; ?>">
244 <label class="ka-rule-form-label"><?php esc_html_e('Override Colors', 'king-addons'); ?></label>
245 <div class="ka-rule-form-field">
246 <label class="ka-toggle">
247 <input type="checkbox" class="ka-rule-override-colors" <?php checked(!empty($rule['override_colors'])); ?> />
248 <span class="ka-toggle-slider"></span>
249 </label>
250 </div>
251 </div>
252
253 <div class="ka-rule-form-row ka-rule-colors-row" style="<?php echo (empty($rule['override_colors']) || $action !== 'override') ? 'display:none;' : ''; ?>">
254 <div class="ka-rule-colors-grid">
255 <div class="ka-rule-color-field">
256 <label><?php esc_html_e('Background', 'king-addons'); ?></label>
257 <input type="text" class="ka-color-picker ka-rule-bg-color" value="<?php echo esc_attr($rule['bg_color'] ?? '#ffffff'); ?>" data-default-color="#ffffff" data-alpha-enabled="true" />
258 </div>
259 <div class="ka-rule-color-field">
260 <label><?php esc_html_e('Accent', 'king-addons'); ?></label>
261 <input type="text" class="ka-color-picker ka-rule-accent-color" value="<?php echo esc_attr($rule['accent_color'] ?? '#0071e3'); ?>" data-default-color="#0071e3" data-alpha-enabled="true" />
262 </div>
263 </div>
264 </div>
265
266 <!-- Form Actions -->
267 <div class="ka-rule-form-actions">
268 <button type="button" class="ka-btn ka-btn-secondary ka-rule-cancel-btn"><?php esc_html_e('Cancel', 'king-addons'); ?></button>
269 <button type="button" class="ka-btn ka-btn-primary ka-rule-save-btn"><?php esc_html_e('Save Rule', 'king-addons'); ?></button>
270 </div>
271 </div>
272 </div>
273 </div>
274 <?php endforeach; ?>
275 <?php endif; ?>
276 </div><!-- /.ka-preloader-rules-list -->
277 </div>
278 </div>
279
280 <!-- Rule Template -->
281 <template id="ka-rule-template">
282 <div class="ka-preloader-rule-item" data-rule-id="">
283 <div class="ka-preloader-rule-item__header">
284 <label class="ka-toggle ka-toggle-sm">
285 <input type="checkbox" class="ka-rule-enabled" checked />
286 <span class="ka-toggle-slider"></span>
287 </label>
288 <div class="ka-preloader-rule-item__summary">
289 <span class="ka-rule-action ka-rule-action--show">
290 <span class="dashicons dashicons-visibility"></span> <?php esc_html_e('Show', 'king-addons'); ?>
291 </span>
292 <span class="ka-rule-on"><?php esc_html_e('on', 'king-addons'); ?></span>
293 <span class="ka-rule-condition"><?php esc_html_e('Specific pages', 'king-addons'); ?></span>
294 <span class="ka-rule-value"></span>
295 </div>
296 <div class="ka-preloader-rule-item__actions">
297 <button type="button" class="ka-btn-icon ka-rule-edit-btn" title="<?php esc_attr_e('Edit', 'king-addons'); ?>">
298 <span class="dashicons dashicons-edit"></span>
299 </button>
300 <button type="button" class="ka-btn-icon ka-rule-delete-btn" title="<?php esc_attr_e('Delete', 'king-addons'); ?>">
301 <span class="dashicons dashicons-trash"></span>
302 </button>
303 </div>
304 </div>
305 <div class="ka-preloader-rule-item__details">
306 <div class="ka-rule-form">
307 <div class="ka-rule-form-row">
308 <label class="ka-rule-form-label"><?php esc_html_e('Action', 'king-addons'); ?></label>
309 <div class="ka-rule-form-field">
310 <div class="ka-btn-group ka-rule-action-btns">
311 <button type="button" class="ka-btn ka-btn-sm active" data-action="show">
312 <span class="dashicons dashicons-visibility"></span> <?php esc_html_e('Show', 'king-addons'); ?>
313 </button>
314 <button type="button" class="ka-btn ka-btn-sm" data-action="hide">
315 <span class="dashicons dashicons-hidden"></span> <?php esc_html_e('Hide', 'king-addons'); ?>
316 </button>
317 <button type="button" class="ka-btn ka-btn-sm" data-action="override">
318 <span class="dashicons dashicons-admin-customizer"></span> <?php esc_html_e('Override', 'king-addons'); ?>
319 </button>
320 </div>
321 <input type="hidden" class="ka-rule-action" value="show" />
322 </div>
323 </div>
324 <div class="ka-rule-form-row ka-rule-template-row" style="display:none;">
325 <label class="ka-rule-form-label"><?php esc_html_e('Template', 'king-addons'); ?></label>
326 <div class="ka-rule-form-field">
327 <select class="ka-rule-template">
328 <?php foreach ($presets as $preset_id => $preset): if (!empty($preset['pro']) && !$is_pro) continue; ?>
329 <option value="<?php echo esc_attr($preset_id); ?>"><?php echo esc_html($preset['title']); ?></option>
330 <?php endforeach; ?>
331 </select>
332 </div>
333 </div>
334 <div class="ka-rule-form-row">
335 <label class="ka-rule-form-label"><?php esc_html_e('Where', 'king-addons'); ?></label>
336 <div class="ka-rule-form-field">
337 <select class="ka-rule-condition">
338 <optgroup label="<?php esc_attr_e('Pages', 'king-addons'); ?>">
339 <option value="specific_pages"><?php esc_html_e('Specific pages', 'king-addons'); ?></option>
340 <option value="all_pages"><?php esc_html_e('All pages', 'king-addons'); ?></option>
341 <option value="front_page"><?php esc_html_e('Front page (Home)', 'king-addons'); ?></option>
342 </optgroup>
343 <optgroup label="<?php esc_attr_e('Posts', 'king-addons'); ?>">
344 <option value="all_posts"><?php esc_html_e('All posts', 'king-addons'); ?></option>
345 <option value="blog_page"><?php esc_html_e('Blog page', 'king-addons'); ?></option>
346 </optgroup>
347 <optgroup label="<?php esc_attr_e('Other', 'king-addons'); ?>">
348 <option value="post_type"><?php esc_html_e('Custom post type', 'king-addons'); ?></option>
349 <option value="archive"><?php esc_html_e('Archive pages', 'king-addons'); ?></option>
350 <option value="search"><?php esc_html_e('Search results', 'king-addons'); ?></option>
351 <option value="404"><?php esc_html_e('404 page', 'king-addons'); ?></option>
352 </optgroup>
353 <optgroup label="<?php esc_attr_e('URL', 'king-addons'); ?>">
354 <option value="url_contains"><?php esc_html_e('URL contains', 'king-addons'); ?></option>
355 <option value="url_equals"><?php esc_html_e('URL equals', 'king-addons'); ?></option>
356 </optgroup>
357 </select>
358 </div>
359 </div>
360 <div class="ka-rule-form-row ka-rule-pages-row">
361 <label class="ka-rule-form-label"><?php esc_html_e('Select Pages', 'king-addons'); ?></label>
362 <div class="ka-rule-form-field">
363 <select class="ka-rule-pages" multiple="multiple">
364 <?php foreach ($all_pages as $page): ?>
365 <option value="<?php echo esc_attr($page->ID); ?>"><?php echo esc_html($page->post_title); ?></option>
366 <?php endforeach; ?>
367 </select>
368 <p class="ka-rule-form-hint"><?php esc_html_e('Hold Ctrl/Cmd to select multiple', 'king-addons'); ?></p>
369 </div>
370 </div>
371 <div class="ka-rule-form-row ka-rule-posttype-row" style="display:none;">
372 <label class="ka-rule-form-label"><?php esc_html_e('Post Type', 'king-addons'); ?></label>
373 <div class="ka-rule-form-field">
374 <select class="ka-rule-posttype">
375 <?php foreach ($post_types as $pt): ?>
376 <option value="<?php echo esc_attr($pt->name); ?>"><?php echo esc_html($pt->labels->name); ?></option>
377 <?php endforeach; ?>
378 </select>
379 </div>
380 </div>
381 <div class="ka-rule-form-row ka-rule-url-row" style="display:none;">
382 <label class="ka-rule-form-label"><?php esc_html_e('URL Value', 'king-addons'); ?></label>
383 <div class="ka-rule-form-field">
384 <input type="text" class="ka-rule-url-value" placeholder="<?php esc_attr_e('e.g., /shop/', 'king-addons'); ?>" />
385 </div>
386 </div>
387 <div class="ka-rule-form-row ka-rule-colors-toggle-row" style="display:none;">
388 <label class="ka-rule-form-label"><?php esc_html_e('Override Colors', 'king-addons'); ?></label>
389 <div class="ka-rule-form-field">
390 <label class="ka-toggle"><input type="checkbox" class="ka-rule-override-colors" /><span class="ka-toggle-slider"></span></label>
391 </div>
392 </div>
393 <div class="ka-rule-form-row ka-rule-colors-row" style="display:none;">
394 <div class="ka-rule-colors-grid">
395 <div class="ka-rule-color-field"><label><?php esc_html_e('Background', 'king-addons'); ?></label><input type="text" class="ka-color-picker ka-rule-bg-color" value="#ffffff" data-default-color="#ffffff" data-alpha-enabled="true" /></div>
396 <div class="ka-rule-color-field"><label><?php esc_html_e('Accent', 'king-addons'); ?></label><input type="text" class="ka-color-picker ka-rule-accent-color" value="#0071e3" data-default-color="#0071e3" data-alpha-enabled="true" /></div>
397 </div>
398 </div>
399 <div class="ka-rule-form-actions">
400 <button type="button" class="ka-btn ka-btn-secondary ka-rule-cancel-btn"><?php esc_html_e('Cancel', 'king-addons'); ?></button>
401 <button type="button" class="ka-btn ka-btn-primary ka-rule-save-btn"><?php esc_html_e('Save Rule', 'king-addons'); ?></button>
402 </div>
403 </div>
404 </div>
405 </div>
406 </template>
407
408 <?php if (!$is_pro && count($rules) >= $max_free_rules): ?>
409 <div class="ka-upgrade-card">
410 <h3><?php esc_html_e('Need More Rules?', 'king-addons'); ?></h3>
411 <p><?php esc_html_e('Upgrade to Pro for unlimited display rules', 'king-addons'); ?></p>
412 <a href="https://kingaddons.com/pricing/" target="_blank" class="ka-btn ka-btn-pink">
413 <span class="dashicons dashicons-star-filled"></span>
414 <?php esc_html_e('Upgrade to Pro', 'king-addons'); ?>
415 </a>
416 </div>
417 <?php endif; ?>
418