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