PluginProbe ʕ •ᴥ•ʔ
Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets / 4.0.7
Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets v4.0.7
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 1 year ago render.php 1 year ago
render.php
454 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 //widget logic
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 if (isset($settings['widgetopts_logic']) && !empty($settings['widgetopts_logic'])) {
364 //do widget logic
365 $display_logic = stripslashes(trim($settings['widgetopts_logic']));
366 $display_logic = apply_filters('widget_options_logic_override', $display_logic);
367 $display_logic = apply_filters('extended_widget_options_logic_override', $display_logic);
368 if ($display_logic === false) {
369 return $placeholder;
370 }
371 if ($display_logic === true) {
372 return $content;
373 }
374 // if (stristr($display_logic, "return") === false) {
375 // $display_logic = "return (" . $display_logic . ");";
376 // }
377 $display_logic = htmlspecialchars_decode($display_logic, ENT_QUOTES);
378 try {
379 if (!widgetopts_safe_eval($display_logic)) {
380 return $placeholder;
381 }
382 } catch (ParseError $e) {
383 return $placeholder;
384 }
385 }
386 }
387 }
388
389 return $content;
390 }
391 }
392
393 if (!function_exists('widgetopts_elementor_before_render')) {
394 add_action('elementor/frontend/widget/before_render', 'widgetopts_elementor_before_render', 10, 2);
395 function widgetopts_elementor_before_render($element)
396 {
397 $enabled = array('button', 'button_plus', 'eael-creative-button', 'cta');
398 if (in_array($element->get_name(), $enabled)) {
399 global $widget_options;
400 if ('activate' == $widget_options['sliding']) {
401 $settings = $element->get_settings();
402 if (isset($settings['widgetopts_open_sliding']) && 'on' == $settings['widgetopts_open_sliding']) {
403 $element->add_render_attribute('button', 'class', 'sl-widgetopts-open');
404 }
405 }
406 }
407 }
408 }
409
410 if (!function_exists('widgetopts_elementor_extra_js')) {
411 add_action('wp_footer', 'widgetopts_elementor_extra_js');
412 function widgetopts_elementor_extra_js()
413 { ?>
414 <script type="text/javascript">
415 (function($, window, document, undefined) {
416 if (jQuery('.widgetopts-placeholder-e').length > 0) {
417 // jQuery('.elementor-column-wrap:has(.widgetopts-placeholder-e)').hide();
418
419 jQuery('.elementor-section:has(.widgetopts-placeholder-e)').each(function() {
420 var pTop = jQuery(this).find('.elementor-element-populated').css('padding-top');
421 var pBot = jQuery(this).find('.elementor-element-populated').css('padding-bottom');
422 var pHeight = jQuery(this).find('.elementor-element-populated').innerHeight();
423 var vert = pHeight - (parseFloat(pTop) + parseFloat(pBot));
424
425 if (typeof vert !== 'undefined' && vert < 5) {
426 jQuery(this).hide();
427 } else {
428 jQuery(this).find('.widgetopts-placeholder-e').each(function() {
429 jQuery(this).closest('.elementor-element').hide();
430
431 var countEl = jQuery(this).closest('.elementor-column').find('.elementor-element').length;
432 var countHolder = jQuery(this).closest('.elementor-column').find('.widgetopts-placeholder-e').length;
433 if (countEl == countHolder) {
434 jQuery(this).closest('.elementor-column').hide();
435 }
436 }).promise().done(function() {
437 var sTop = jQuery(this).closest('.elementor-section').css('padding-top');
438 var sBot = jQuery(this).closest('.elementor-section').css('padding-bottom');
439 var sHeight = jQuery(this).closest('.elementor-section').innerHeight();
440 var svert = sHeight - (parseFloat(sTop) + parseFloat(sBot));
441
442 if (typeof svert !== 'undefined' && svert < 5) {
443 jQuery(this).closest('.elementor-section').hide();
444 }
445 });
446 }
447
448 });
449 }
450 })(jQuery, window, document);
451 </script>
452 <?php }
453 }
454 ?>