PluginProbe ʕ •ᴥ•ʔ
Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets / 4.2.3
Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets v4.2.3
4.2.5 4.2.4 trunk 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.2 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8 3.8.1 3.8.10 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.8.8 3.8.9 3.8.9.1 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.5.1 4.0.6 4.0.6.1 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.2 4.1.3 4.2.0 4.2.1 4.2.2 4.2.3
widget-options / includes / pagebuilders / elementor / render.php
widget-options / includes / pagebuilders / elementor Last commit date
elementor.php 2 months ago render.php 2 months ago
render.php
466 lines
1 <?php
2
3 /**
4 * Extends funtionality to Elementor Pagebuilder
5 *
6 *
7 * @copyright Copyright (c) 2017, Jeffrey Carandang
8 * @since 4.3
9 */
10 // Exit if accessed directly
11 if (!defined('ABSPATH')) exit;
12
13 if (!function_exists('widgetopts_elementor_render')) {
14 add_action('elementor/widget/render_content', 'widgetopts_elementor_render', 10, 2);
15 function widgetopts_elementor_render($content, $widget)
16 {
17 if (!Elementor\Plugin::$instance->editor->is_edit_mode()) {
18 global $widget_options;
19 $settings = $widget->get_settings();
20
21 $hidden = false;
22 $placeholder = '<div class="widgetopts-placeholder-e"></div>';
23 $visibility_opts = isset($settings['widgetopts_visibility']) ? $settings['widgetopts_visibility'] : 'hide';
24
25 $tax_opts = (isset($widget_options['settings']) && isset($widget_options['settings']['taxonomies_keys'])) ? $widget_options['settings']['taxonomies_keys'] : array();
26 $is_misc = ('activate' == $widget_options['visibility'] && isset($widget_options['settings']['visibility']) && isset($widget_options['settings']['visibility']['misc'])) ? true : false;
27 $is_types = ('activate' == $widget_options['visibility'] && isset($widget_options['settings']['visibility']) && isset($widget_options['settings']['visibility']['post_type'])) ? true : false;
28 $is_tax = ('activate' == $widget_options['visibility'] && isset($widget_options['settings']['visibility']) && isset($widget_options['settings']['visibility']['taxonomies'])) ? true : false;
29
30 //pages
31 if ($is_misc && ((is_home() && is_front_page()) || is_front_page())) {
32 if (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && in_array('home', $settings['widgetopts_misc']) && $visibility_opts == 'hide') {
33 $hidden = true; //hide if checked on hidden pages
34 } elseif ((!isset($settings['widgetopts_misc']) || (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && !in_array('home', $settings['widgetopts_misc']))) && $visibility_opts == 'show') {
35 $hidden = true; //hide if not checked on visible pages
36 }
37
38 //do return to bypass other conditions
39 $hidden = apply_filters('widgetopts_elementor_visibility_home', $hidden);
40 if ($hidden) {
41 return $placeholder;
42 }
43 } elseif ($is_misc && is_home()) {
44 if (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && in_array('blog', $settings['widgetopts_misc']) && $visibility_opts == 'hide') {
45 $hidden = true; //hide if checked on hidden pages
46 } elseif ((!isset($settings['widgetopts_misc']) || (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && !in_array('blog', $settings['widgetopts_misc']))) && $visibility_opts == 'show') {
47 $hidden = true; //hide if not checked on visible pages
48 }
49
50 //do return to bypass other conditions
51 $hidden = apply_filters('widgetopts_elementor_visibility_blog', $hidden);
52 if ($hidden) {
53 return $placeholder;
54 }
55 } elseif ($is_tax && is_category()) {
56 //category page
57 if (!isset($settings['widgetopts_tax_category'])) {
58 $settings['widgetopts_tax_category'] = array();
59 }
60 if (!isset($settings['widgetopts_taxonomies'])) {
61 $settings['widgetopts_taxonomies'] = array();
62 }
63
64 $cat_lists = $settings['widgetopts_tax_category'];
65 if (!in_array('category', $settings['widgetopts_taxonomies']) && $visibility_opts == 'hide' && in_array(get_query_var('cat'), $cat_lists)) {
66 $hidden = true; //hide if exists on hidden pages
67 } elseif (!in_array('category', $settings['widgetopts_taxonomies']) && $visibility_opts == 'show' && !in_array(get_query_var('cat'), $cat_lists)) {
68 $hidden = true; //hide if doesn't exists on visible pages
69 } elseif (in_array('category', $settings['widgetopts_taxonomies']) && $visibility_opts == 'hide') {
70 $hidden = true; //hide to all categories
71 } elseif (in_array('category', $settings['widgetopts_taxonomies']) && $visibility_opts == 'show') {
72 $hidden = false; //hide to all categories
73 }
74 //
75 // //do return to bypass other conditions
76 $hidden = apply_filters('widgetopts_elementor_visibility_categories', $hidden);
77 if ($hidden) {
78 return $placeholder;
79 }
80 } elseif ($is_tax && is_tag()) {
81 if (!isset($settings['widgetopts_tax_post_tag'])) {
82 $settings['widgetopts_tax_post_tag'] = array();
83 }
84 if (!isset($settings['widgetopts_taxonomies'])) {
85 $settings['widgetopts_taxonomies'] = array();
86 }
87
88 if (in_array('post_tag', $settings['widgetopts_taxonomies']) && $visibility_opts == 'hide') {
89 $hidden = true; //hide to all tags
90 } elseif (in_array('post_tag', $settings['widgetopts_taxonomies']) && $visibility_opts == 'show') {
91 $hidden = false; //hide to all tags
92 }
93 //
94 // //do return to bypass other conditions
95 $hidden = apply_filters('widgetopts_elementor_visibility_tags', $hidden);
96 if ($hidden) {
97 return $placeholder;
98 }
99 } elseif ($is_tax && is_tax()) {
100 $term = get_queried_object();
101
102 //taxonomies page
103 if (!isset($settings['widgetopts_taxonomies'])) {
104 $settings['widgetopts_taxonomies'] = array();
105 }
106 // print_r( $term_lists );
107 if (in_array($term->taxonomy, $settings['widgetopts_taxonomies']) && $visibility_opts == 'hide') {
108 $hidden = true; //hide to all tags
109 } elseif (!in_array($term->taxonomy, $settings['widgetopts_taxonomies']) && $visibility_opts == 'show') {
110 $hidden = true; //hide to all tags
111 }
112
113 //do return to bypass other conditions
114 $hidden = apply_filters('widgetopts_elementor_visibility_taxonomies', $hidden);
115 if ($hidden) {
116 return $placeholder;
117 }
118 } elseif ($is_misc && is_archive()) {
119 //archives page
120 if (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && in_array('archives', $settings['widgetopts_misc']) && $visibility_opts == 'hide') {
121 $hidden = true; //hide if checked on hidden pages
122 } elseif ((!isset($settings['widgetopts_misc']) || (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && !in_array('archives', $settings['widgetopts_misc']))) && $visibility_opts == 'show') {
123 $hidden = true; //hide if not checked on visible pages
124 }
125
126 //do return to bypass other conditions
127 $hidden = apply_filters('widgetopts_elementor_visibility_archives', $hidden);
128 if ($hidden) {
129 return $placeholder;
130 }
131 } elseif ($is_misc && is_404()) {
132 //404 page
133 if (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && in_array('404', $settings['widgetopts_misc']) && $visibility_opts == 'hide') {
134 $hidden = true; //hide if checked on hidden pages
135 } elseif ((!isset($settings['widgetopts_misc']) || (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && !in_array('404', $settings['widgetopts_misc']))) && $visibility_opts == 'show') {
136 $hidden = true; //hide if not checked on visible pages
137 }
138
139 //do return to bypass other conditions
140 $hidden = apply_filters('widget_options_visibility_404', $hidden);
141 if ($hidden) {
142 return $placeholder;
143 }
144 } elseif ($is_misc && is_search()) {
145 if (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && in_array('search', $settings['widgetopts_misc']) && $visibility_opts == 'hide') {
146 $hidden = true; //hide if checked on hidden pages
147 } elseif ((!isset($settings['widgetopts_misc']) || (isset($settings['widgetopts_misc']) && is_array($settings['widgetopts_misc']) && !in_array('search', $settings['widgetopts_misc']))) && $visibility_opts == 'show') {
148 $hidden = true;
149 }
150
151 //do return to bypass other conditions
152 $hidden = apply_filters('widgetopts_elementor_visibility_search', $hidden);
153 if ($hidden) {
154 return $placeholder;
155 }
156 } elseif (is_single() && !is_page()) {
157 global $wp_query;
158 $post = $wp_query->post;
159
160 if (!isset($settings['widgetopts_types']) || ($is_types && !isset($settings['widgetopts_types'])) || (isset($settings['widgetopts_types']) && !is_array($settings['widgetopts_types']))) {
161 $settings['widgetopts_types'] = array();
162 }
163
164 if ($visibility_opts == 'hide' && in_array($post->post_type, $settings['widgetopts_types'])) {
165 $hidden = true; //hide if exists on hidden pages
166 } elseif ($visibility_opts == 'show' && !in_array($post->post_type, $settings['widgetopts_types'])) {
167 $hidden = true; //hide if doesn't exists on visible pages
168 }
169
170 // do return to bypass other conditions
171 $hidden = apply_filters('widgetopts_elementor_visibility_single', $hidden);
172
173
174 // $taxonomy_names = get_post_taxonomies( $post->ID );
175 // $array_intersect = array_intersect( $tax_opts, $taxonomy_names );
176
177 if (!isset($settings['widgetopts_tax_category'])) {
178 $settings['widgetopts_tax_category'] = array();
179 }
180
181 if (isset($settings['widgetopts_tax_category']) && !empty($settings['widgetopts_tax_category'])) {
182 $cats = wp_get_post_categories($post->ID);
183
184 if (is_array($cats) && !empty($cats)) {
185 $checked_cats = $settings['widgetopts_tax_category'];
186 $intersect = array_intersect($cats, $checked_cats);
187 if (!empty($intersect) && $visibility_opts == 'hide') {
188 $hidden = true;
189 } elseif (!empty($intersect) && $visibility_opts == 'show') {
190 $hidden = false;
191 }
192
193 $hidden = apply_filters('widgetopts_elementor_visibility_single_category', $hidden);
194 }
195 }
196
197 if ($hidden) {
198 return $placeholder;
199 }
200 } elseif ($is_types && is_page()) {
201 global $wp_query;
202
203 $post = $wp_query->post;
204
205 //do post type condition first
206 if (isset($settings['widgetopts_types'])) {
207 if ($visibility_opts == 'hide' && in_array('page', $settings['widgetopts_types'])) {
208 $hidden = true; //hide if exists on hidden pages
209 } elseif ($visibility_opts == 'show' && !in_array('page', $settings['widgetopts_types'])) {
210 $hidden = true; //hide if doesn't exists on visible pages
211 }
212 } else {
213 // print_r( $settings['widgetopts_pages'] );
214 //do per pages condition
215 if (!isset($settings['widgetopts_pages'])) {
216 $settings['widgetopts_pages'] = array();
217 }
218
219 if ($visibility_opts == 'hide' && in_array($post->ID, $settings['widgetopts_pages'])) {
220 $hidden = true; //hide if exists on hidden pages
221 } elseif ($visibility_opts == 'show' && !in_array($post->ID, $settings['widgetopts_pages'])) {
222 $hidden = true; //hide if doesn't exists on visible pages
223 }
224 }
225
226 // //do return to bypass other conditions
227 $hidden = apply_filters('widgetopts_elementor_visibility_page', $hidden);
228 if ($hidden) {
229 return $placeholder;
230 }
231 }
232
233 //ACF
234 if (isset($widget_options['acf']) && 'activate' == $widget_options['acf']) {
235 if (isset($settings['widgetopts_acf_field']) && !empty($settings['widgetopts_acf_field'])) {
236 $acf = get_field_object($settings['widgetopts_acf_field']);
237 if ($acf && is_array($acf)) {
238 $acf_visibility = isset($settings['widgetopts_acf_visibility']) ? $settings['widgetopts_acf_visibility'] : 'hide';
239
240 //handle repeater fields
241 if (isset($acf['value'])) {
242 if (is_array($acf['value'])) {
243 $acf['value'] = implode(', ', array_map(function ($acf_array_value) {
244 $acf_implode = '';
245 if (is_array($acf_array_value)) {
246 $acf_implode = implode(',', array_filter($acf_array_value));
247 } else {
248 $acf_implode = $acf_array_value;
249 }
250 return $acf_implode;
251 }, $acf['value']));
252 }
253 }
254 switch ($settings['widgetopts_acf_condition']) {
255 case 'equal':
256 if (isset($acf['value'])) {
257 if ('show' == $acf_visibility && $acf['value'] == $settings['widgetopts_acf']) {
258 $hidden = false;
259 } else if ('show' == $acf_visibility && $acf['value'] != $settings['widgetopts_acf']) {
260 $hidden = true;
261 } else if ('hide' == $acf_visibility && $acf['value'] == $settings['widgetopts_acf']) {
262 $hidden = true;
263 } else if ('hide' == $acf_visibility && $acf['value'] != $settings['widgetopts_acf']) {
264 $hidden = false;
265 }
266 }
267 break;
268
269 case 'not_equal':
270 if (isset($acf['value'])) {
271 if ('show' == $acf_visibility && $acf['value'] == $settings['widgetopts_acf']) {
272 $hidden = true;
273 } else if ('show' == $acf_visibility && $acf['value'] != $settings['widgetopts_acf']) {
274 $hidden = false;
275 } else if ('hide' == $acf_visibility && $acf['value'] == $settings['widgetopts_acf']) {
276 $hidden = false;
277 } else if ('hide' == $acf_visibility && $acf['value'] != $settings['widgetopts_acf']) {
278 $hidden = true;
279 }
280 }
281 break;
282
283 case 'contains':
284 if (isset($acf['value'])) {
285 if ('show' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) !== false) {
286 $hidden = false;
287 } else if ('show' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) === false) {
288 $hidden = true;
289 } else if ('hide' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) !== false) {
290 $hidden = true;
291 } else if ('hide' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) === false) {
292 $hidden = false;
293 }
294 }
295 break;
296
297 case 'not_contains':
298 if (isset($acf['value'])) {
299 if ('show' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) !== false) {
300 $hidden = true;
301 } else if ('show' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) === false) {
302 $hidden = false;
303 } else if ('hide' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) !== false) {
304 $hidden = false;
305 } else if ('hide' == $acf_visibility && strpos($acf['value'], $settings['widgetopts_acf']) === false) {
306 $hidden = true;
307 }
308 }
309 break;
310
311 case 'empty':
312 if ('show' == $acf_visibility && empty($acf['value'])) {
313 $hidden = false;
314 } else if ('show' == $acf_visibility && !empty($acf['value'])) {
315 $hidden = true;
316 } elseif ('hide' == $acf_visibility && empty($acf['value'])) {
317 $hidden = true;
318 } else if ('hide' == $acf_visibility && !empty($acf['value'])) {
319 $hidden = false;
320 }
321 break;
322
323 case 'not_empty':
324 if ('show' == $acf_visibility && empty($acf['value'])) {
325 $hidden = true;
326 } else if ('show' == $acf_visibility && !empty($acf['value'])) {
327 $hidden = false;
328 } elseif ('hide' == $acf_visibility && empty($acf['value'])) {
329 $hidden = false;
330 } else if ('hide' == $acf_visibility && !empty($acf['value'])) {
331 $hidden = true;
332 }
333 break;
334
335 default:
336 # code...
337 break;
338 }
339
340 // //do return to bypass other conditions
341 $hidden = apply_filters('widgetopts_elementor_visibility_acf', $hidden);
342 if ($hidden) {
343 return $placeholder;
344 }
345 }
346 }
347 }
348
349 // User state check
350 if (isset($widget_options['state']) && 'activate' == $widget_options['state']) {
351 if (isset($settings['widgetopts_roles_state']) && !empty($settings['widgetopts_roles_state'])) {
352 //do state action here
353 if ($settings['widgetopts_roles_state'] == 'out' && is_user_logged_in()) {
354 return $placeholder;
355 } else if ($settings['widgetopts_roles_state'] == 'in' && !is_user_logged_in()) {
356 return $placeholder;
357 }
358 }
359 }
360
361 //widget logic
362 if ('activate' == $widget_options['logic']) {
363 // New snippet-based system
364 if (isset($settings['widgetopts_logic_snippet_id']) && !empty($settings['widgetopts_logic_snippet_id'])) {
365 $snippet_id = $settings['widgetopts_logic_snippet_id'];
366 if (class_exists('WidgetOpts_Snippets_API')) {
367 $result = WidgetOpts_Snippets_API::execute_snippet($snippet_id);
368 if ($result === false) {
369 return $placeholder;
370 }
371 }
372 }
373 // Legacy support for old inline logic
374 elseif (isset($settings['widgetopts_logic']) && !empty($settings['widgetopts_logic'])) {
375 // Flag that legacy migration is needed
376 if (!get_option('wopts_display_logic_migration_required', false)) {
377 update_option('wopts_display_logic_migration_required', true);
378 }
379
380 $display_logic = stripslashes(trim($settings['widgetopts_logic']));
381 $display_logic = apply_filters('widget_options_logic_override', $display_logic);
382 $display_logic = apply_filters('extended_widget_options_logic_override', $display_logic);
383 if ($display_logic === false) {
384 return $placeholder;
385 }
386 if ($display_logic === true) {
387 return $content;
388 }
389 $display_logic = htmlspecialchars_decode($display_logic, ENT_QUOTES);
390 try {
391 if (!widgetopts_safe_eval($display_logic)) {
392 return $placeholder;
393 }
394 } catch (ParseError $e) {
395 return $placeholder;
396 }
397 }
398 }
399 }
400
401 return $content;
402 }
403 }
404
405 if (!function_exists('widgetopts_elementor_before_render')) {
406 add_action('elementor/frontend/widget/before_render', 'widgetopts_elementor_before_render', 10, 2);
407 function widgetopts_elementor_before_render($element)
408 {
409 $enabled = array('button', 'button_plus', 'eael-creative-button', 'cta');
410 if (in_array($element->get_name(), $enabled)) {
411 global $widget_options;
412 if ('activate' == $widget_options['sliding']) {
413 $settings = $element->get_settings();
414 if (isset($settings['widgetopts_open_sliding']) && 'on' == $settings['widgetopts_open_sliding']) {
415 $element->add_render_attribute('button', 'class', 'sl-widgetopts-open');
416 }
417 }
418 }
419 }
420 }
421
422 if (!function_exists('widgetopts_elementor_extra_js')) {
423 add_action('wp_footer', 'widgetopts_elementor_extra_js');
424 function widgetopts_elementor_extra_js()
425 { ?>
426 <script type="text/javascript">
427 (function($, window, document, undefined) {
428 if (jQuery('.widgetopts-placeholder-e').length > 0) {
429 // jQuery('.elementor-column-wrap:has(.widgetopts-placeholder-e)').hide();
430
431 jQuery('.elementor-section:has(.widgetopts-placeholder-e)').each(function() {
432 var pTop = jQuery(this).find('.elementor-element-populated').css('padding-top');
433 var pBot = jQuery(this).find('.elementor-element-populated').css('padding-bottom');
434 var pHeight = jQuery(this).find('.elementor-element-populated').innerHeight();
435 var vert = pHeight - (parseFloat(pTop) + parseFloat(pBot));
436
437 if (typeof vert !== 'undefined' && vert < 5) {
438 jQuery(this).hide();
439 } else {
440 jQuery(this).find('.widgetopts-placeholder-e').each(function() {
441 jQuery(this).closest('.elementor-element').hide();
442
443 var countEl = jQuery(this).closest('.elementor-column').find('.elementor-element').length;
444 var countHolder = jQuery(this).closest('.elementor-column').find('.widgetopts-placeholder-e').length;
445 if (countEl == countHolder) {
446 jQuery(this).closest('.elementor-column').hide();
447 }
448 }).promise().done(function() {
449 var sTop = jQuery(this).closest('.elementor-section').css('padding-top');
450 var sBot = jQuery(this).closest('.elementor-section').css('padding-bottom');
451 var sHeight = jQuery(this).closest('.elementor-section').innerHeight();
452 var svert = sHeight - (parseFloat(sTop) + parseFloat(sBot));
453
454 if (typeof svert !== 'undefined' && svert < 5) {
455 jQuery(this).closest('.elementor-section').hide();
456 }
457 });
458 }
459
460 });
461 }
462 })(jQuery, window, document);
463 </script>
464 <?php }
465 }
466 ?>