PluginProbe ʕ •ᴥ•ʔ
Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets / 3.9.0
Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets v3.9.0
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 / widgets / display.php
widget-options / includes / widgets Last commit date
option-tabs 3 years ago display.php 3 years ago extras.php 4 years ago widgets.php 7 years ago
display.php
525 lines
1 <?php
2 /**
3 * Handles Front-end Display
4 *
5 * @copyright Copyright (c) 2015, Jeffrey Carandang
6 * @since 1.0
7 */
8 // Exit if accessed directly
9 if ( ! defined( 'ABSPATH' ) ) exit;
10
11 /**
12 * Handles widget_display_callback filter
13 *
14 * @since 1.0
15 * @global $widget_options
16 * @return $instance
17 */
18
19 //check if function exists
20 if( !function_exists( 'widgetopts_display_callback' ) ):
21 function widgetopts_display_callback( $instance, $widget, $args ){
22 global $widget_options, $current_user;
23
24 // WPML FIX
25 $hasWPML = has_filter('wpml_current_language');
26 $hasWPML = (function_exists('pll_the_languages')) ? false : $hasWPML;
27 $default_language = $hasWPML ? apply_filters( 'wpml_default_language', NULL ) : false;
28
29 $hidden = false;
30 $opts = ( isset( $instance[ 'extended_widget_opts-'. $widget->id ] ) ) ? $instance[ 'extended_widget_opts-'. $widget->id ] : array();
31 $visibility = array( 'show' => array(), 'hide' => array() );
32
33 //wordpress pages
34 $visibility = isset( $opts['visibility'] ) ? $opts['visibility'] : array();
35 $visibility_opts = isset( $opts['visibility']['options'] ) ? $opts['visibility']['options'] : 'hide';
36
37 $is_misc = ( 'activate' == $widget_options['visibility'] && isset( $widget_options['settings']['visibility'] ) && isset( $widget_options['settings']['visibility']['misc'] ) ) ? true : false;
38 $is_types = ( 'activate' == $widget_options['visibility'] && isset( $widget_options['settings']['visibility'] ) && isset( $widget_options['settings']['visibility']['post_type'] ) ) ? true : false;
39 $is_tax = ( 'activate' == $widget_options['visibility'] && isset( $widget_options['settings']['visibility'] ) && isset( $widget_options['settings']['visibility']['taxonomies'] ) ) ? true : false;
40
41 $isWooPage = false;
42 if ( class_exists( 'WooCommerce' ) ) {
43 $wooPageID = 0;
44
45 $wooPageID = ( is_shop() ) ? get_option( 'woocommerce_shop_page_id' ) : $wooPageID;
46 if ( $wooPageID ) {
47 $isWooPage = true;
48
49 $visibility['pages'] = !empty($visibility['pages']) ? $visibility['pages'] : [];
50 if( $visibility_opts == 'hide' && array_key_exists( $wooPageID , $visibility['pages']) ){
51 $hidden = true; //hide if exists on hidden pages
52 }elseif( $visibility_opts == 'show' && !array_key_exists( $wooPageID , $visibility['pages']) ){
53 $hidden = true; //hide if doesn't exists on visible pages
54 }
55
56 //do return to bypass other conditions
57 $hidden = apply_filters( 'widget_options_visibility_page', $hidden );
58
59 if( $hidden ){
60 return false;
61 }
62 }
63 }
64
65 // Normal Pages
66 if ( !$isWooPage ) {
67 if ( $is_misc && ( ( is_home() && is_front_page() ) || is_front_page() ) ) {
68 if( isset( $visibility['misc']['home'] ) && $visibility_opts == 'hide' ){
69 $hidden = true; //hide if checked on hidden pages
70 }elseif( !isset( $visibility['misc']['home'] ) && $visibility_opts == 'show' ){
71 $hidden = true; //hide if not checked on visible pages
72 }
73
74 //do return to bypass other conditions
75 $hidden = apply_filters( 'widget_options_visibility_home', $hidden );
76 if( $hidden ){
77 return false;
78 }
79 }elseif ( $is_misc && is_home() ) { //filter for blog page
80 if( isset( $visibility['misc']['blog'] ) && $visibility_opts == 'hide' ){
81 $hidden = true; //hide if checked on hidden pages
82 }elseif( !isset( $visibility['misc']['blog'] ) && $visibility_opts == 'show' ){
83 $hidden = true; //hide if not checked on visible pages
84 }
85
86 //do return to bypass other conditions
87 $hidden = apply_filters( 'widget_options_visibility_blog', $hidden );
88 if( $hidden ){
89 return false;
90 }
91
92 }elseif ( $is_tax && is_category() ) {
93 if( !isset( $visibility['categories'] ) ){
94 $visibility['categories'] = array();
95 }
96
97 // WPML TRANSLATION OBJECT FIX
98 $category_id = ($hasWPML) ? apply_filters( 'wpml_object_id', get_query_var('cat'), 'category', true, $default_language ) : get_query_var('cat');
99
100 if( $visibility_opts == 'hide' && ((array_key_exists($category_id, $visibility['categories']) && $visibility['categories'][$category_id] == '1') || in_array($category_id, $visibility['categories'])) ){
101 $hidden = true; //hide if exists on hidden pages
102 }elseif( $visibility_opts == 'show' && ((!array_key_exists($category_id, $visibility['categories']) && empty($visibility['categories'][$category_id])) && !in_array($category_id, $visibility['categories'])) ){
103 $hidden = true; //hide if doesn't exists on visible pages
104 }elseif( ((array_key_exists($category_id, $visibility['categories']) && $visibility['categories'][$category_id] == '1') || in_array($category_id, $visibility['categories'])) && $visibility_opts == 'hide' ){
105 $hidden = true; //hide to all categories
106 }elseif( ((array_key_exists($category_id, $visibility['categories']) && $visibility['categories'][$category_id] == '1') || in_array($category_id, $visibility['categories'])) && $visibility_opts == 'show' ){
107 $hidden = false; //hide to all categories
108 }
109
110 //do return to bypass other conditions
111 $hidden = apply_filters( 'widget_options_visibility_categories', $hidden );
112 if( $hidden ){
113 return false;
114 }
115 }elseif ( $is_tax && is_tag() ) {
116 if( !isset( $visibility['tags'] ) ){
117 $visibility['tags'] = array();
118 }
119
120 if( ( isset( $visibility['taxonomies']['post_tag'] ) && $visibility_opts == 'hide' ) ||
121 ( !isset( $visibility['taxonomies']['post_tag'] ) && $visibility_opts == 'show' )
122 ){
123 $hidden = true; //hide to all tags
124 }elseif( isset( $visibility['taxonomies']['post_tag'] ) && $visibility_opts == 'show' ){
125 $hidden = false; //hide to all tags
126 }
127
128 //do return to bypass other conditions
129 $hidden = apply_filters( 'widget_options_visibility_tags', $hidden );
130 if( $hidden ){
131 return false;
132 }
133 }elseif ( $is_tax && is_tax() ) {
134 $term = get_queried_object();
135 if( !isset( $visibility['taxonomies'] ) ){
136 $visibility['taxonomies'] = array();
137 }
138
139 if( $visibility_opts == 'hide' && array_key_exists( $term->taxonomy , $visibility['taxonomies']) ){
140 $hidden = true; //hide if exists on hidden pages
141 }elseif( $visibility_opts == 'show' && !array_key_exists( $term->taxonomy , $visibility['taxonomies']) ){
142 $hidden = true; //hide if doesn't exists on visible pages
143 }
144
145 //do return to bypass other conditions
146 $hidden = apply_filters( 'widget_options_visibility_taxonomies', $hidden );
147 if( $hidden ){
148 return false;
149 }
150 }elseif ( $is_misc && is_archive() ) {
151 if( isset( $visibility['misc']['archives'] ) && $visibility_opts == 'hide' ){
152 $hidden = true; //hide if checked on hidden pages
153 }elseif( !isset( $visibility['misc']['archives'] ) && $visibility_opts == 'show' ){
154 $hidden = true; //hide if not checked on visible pages
155 }
156
157 //do return to bypass other conditions
158 $hidden = apply_filters( 'widget_options_visibility_archives', $hidden );
159 if( $hidden ){
160 return false;
161 }
162 }elseif ( $is_misc && is_404() ) {
163 if( isset( $visibility['misc']['404'] ) && $visibility_opts == 'hide' ){
164 $hidden = true; //hide if checked on hidden pages
165 }elseif( !isset( $visibility['misc']['404'] ) && $visibility_opts == 'show' ){
166 $hidden = true; //hide if not checked on visible pages
167 }
168
169 //do return to bypass other conditions
170 $hidden = apply_filters( 'widget_options_visibility_404', $hidden );
171 if( $hidden ){
172 return false;
173 }
174 }elseif ( $is_misc && is_search() ) {
175 if( isset( $visibility['misc']['search'] ) && $visibility_opts == 'hide' ){
176 $hidden = true; //hide if checked on hidden pages
177 }elseif( !isset( $visibility['misc']['search'] ) && $visibility_opts == 'show' ){
178 $hidden = true; //hide if not checked on visible pages
179 }
180
181 //do return to bypass other conditions
182 $hidden = apply_filters( 'widget_options_visibility_search', $hidden );
183 if( $hidden ){
184 return false;
185 }
186 }elseif ( is_single() && !is_page() ) {
187 global $post;
188 $type = $post->post_type;
189
190 if( !isset( $visibility['types'] ) ){
191 $visibility['types'] = array();
192 }
193 if( $visibility_opts == 'hide' && array_key_exists( $type , $visibility['types']) ){
194 $hidden = true; //hide if exists on hidden pages
195 }elseif( $visibility_opts == 'show' && !array_key_exists( $type , $visibility['types']) ){
196 $hidden = true; //hide if doesn't exists on visible pages
197 }
198 // do return to bypass other conditions
199 $hidden = apply_filters( 'widget_options_visibility_types', $hidden );
200 //hide posts assign on category
201 if( !isset( $visibility['categories'] ) ){
202 $visibility['categories'] = array();
203 }
204 if( isset( $visibility['categories']['all_categories'] ) && $visibility_opts == 'hide' ){
205 $hidden = true; //hide to all categories
206 }elseif( isset( $visibility['categories']['all_categories'] ) && $visibility_opts == 'show' ){
207 $hidden = false; //hide to all categories
208 }elseif( !isset( $visibility['categories']['all_categories'] ) && !empty( $visibility['categories'] ) ) {
209 $cats = wp_get_post_categories( get_the_ID() );
210 if( is_array( $cats ) && !empty( $cats ) ){
211 $checked_cats = array_keys( $visibility['categories'] );
212 $intersect = array_intersect( $cats , $checked_cats );
213 if( !empty( $intersect ) && $visibility_opts == 'hide' ){
214 $hidden = true;
215 }elseif( !empty( $intersect ) && $visibility_opts == 'show' ){
216 $hidden = false;
217 }
218 }
219 }
220 // do return to bypass other conditions
221 $hidden = apply_filters( 'widget_options_visibility_post_category', $hidden );
222 if( $hidden ){
223 return false;
224 }
225 // echo $type;
226 }elseif ( $is_types && (is_page() || get_post_type(get_the_ID()) == 'page') ) {
227 global $post;
228
229 // WPML FIX
230 $page_id = get_queried_object_id();
231 $parent_id = wp_get_post_parent_id($page_id);
232
233 $pageID = ($hasWPML) ? apply_filters( 'wpml_object_id', $page_id, 'page', true, $default_language ) : $page_id;
234 $parentID = ($hasWPML) ? apply_filters( 'wpml_object_id', $parent_id, 'page', true, $default_language ) : $parent_id;
235
236 //do post type condition first
237 if( isset( $visibility['types'] ) && isset( $visibility['types']['page'] ) ){
238 if( $visibility_opts == 'hide' && array_key_exists( 'page' , $visibility['types']) ){
239 $hidden = true; //hide if exists on hidden pages
240 }elseif( $visibility_opts == 'show' && !array_key_exists( 'page' , $visibility['types']) ){
241 $hidden = true; //hide if doesn't exists on visible pages
242 }
243 }else{
244 //do per pages condition
245 if( !isset( $visibility['pages'] ) ){
246 $visibility['pages'] = array();
247 }
248
249 if( $visibility_opts == 'hide' && (array_key_exists( $pageID , $visibility['pages']) || in_array($pageID, $visibility['pages'])) ){
250 $hidden = true; //hide if exists on hidden pages
251 }elseif( $visibility_opts == 'show' && (!array_key_exists( $pageID , $visibility['pages']) && !in_array($pageID, $visibility['pages'])) ){
252 $hidden = true; //hide if doesn't exists on visible pages
253 }
254 }
255 //do return to bypass other conditions
256 $hidden = apply_filters( 'widget_options_visibility_page', $hidden );
257 if( $hidden ){
258 return false;
259 }
260 }
261 }
262 //end wordpress pages
263
264
265 //ACF
266 if( isset( $widget_options['acf'] ) && 'activate' == $widget_options['acf'] ){
267 if( isset( $visibility['acf']['field'] ) && !empty( $visibility['acf']['field'] ) ){
268 $acf = get_field_object( $visibility['acf']['field'] );
269 if( $acf && is_array( $acf ) ){
270 $acf_visibility = ( isset( $visibility['acf'] ) && isset( $visibility['acf']['visibility'] ) ) ? $visibility['acf']['visibility'] : 'hide';
271
272 //handle repeater fields
273 if( isset( $acf['value'] ) ){
274 if( is_array( $acf['value'] ) ){
275 $acf['value'] = implode(', ', array_map(function ( $acf_array_value ) {
276 $acf_implode = implode( ',', array_filter($acf_array_value) );
277 return $acf_implode;
278 }, $acf['value']));
279 }
280 }
281
282 switch ( $visibility['acf']['condition'] ) {
283 case 'equal':
284 if( isset( $acf['value'] ) ){
285 if( 'show' == $acf_visibility && $acf['value'] == $visibility['acf']['value'] ){
286 $hidden = false;
287 }else if( 'show' == $acf_visibility && $acf['value'] != $visibility['acf']['value'] ){
288 $hidden = true;
289 }else if( 'hide' == $acf_visibility && $acf['value'] == $visibility['acf']['value'] ){
290 $hidden = true;
291 }else if( 'hide' == $acf_visibility && $acf['value'] != $visibility['acf']['value'] ){
292 $hidden = false;
293 }
294 }
295 break;
296
297 case 'not_equal':
298 if( isset( $acf['value'] ) ){
299 if( 'show' == $acf_visibility && $acf['value'] == $visibility['acf']['value'] ){
300 $hidden = true;
301 }else if( 'show' == $acf_visibility && $acf['value'] != $visibility['acf']['value'] ){
302 $hidden = false;
303 }else if( 'hide' == $acf_visibility && $acf['value'] == $visibility['acf']['value'] ){
304 $hidden = false;
305 }else if( 'hide' == $acf_visibility && $acf['value'] != $visibility['acf']['value'] ){
306 $hidden = true;
307 }
308 }
309 break;
310
311 case 'contains':
312 if( isset( $acf['value'] ) ){
313 if( 'show' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) !== false ){
314 $hidden = false;
315 }else if( 'show' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) === false ){
316 $hidden = true;
317 }else if( 'hide' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) !== false ){
318 $hidden = true;
319 }else if( 'hide' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) === false ){
320 $hidden = false;
321 }
322 }
323 break;
324
325 case 'not_contains':
326 if( isset( $acf['value'] ) ){
327 if( 'show' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) !== false ){
328 $hidden = true;
329 }else if( 'show' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) === false ){
330 $hidden = false;
331 }else if( 'hide' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) !== false ){
332 $hidden = false;
333 }else if( 'hide' == $acf_visibility && strpos( $acf['value'], $visibility['acf']['value'] ) === false ){
334 $hidden = true;
335 }
336 }
337 break;
338
339 case 'empty':
340 if( 'show' == $acf_visibility && empty( $acf['value'] ) ){
341 $hidden = false;
342 }else if( 'show' == $acf_visibility && !empty( $acf['value'] ) ){
343 $hidden = true;
344 }elseif( 'hide' == $acf_visibility && empty( $acf['value'] ) ){
345 $hidden = true;
346 }else if( 'hide' == $acf_visibility && !empty( $acf['value'] ) ){
347 $hidden = false;
348 }
349 break;
350
351 case 'not_empty':
352 if( 'show' == $acf_visibility && empty( $acf['value'] ) ){
353 $hidden = true;
354 }else if( 'show' == $acf_visibility && !empty( $acf['value'] ) ){
355 $hidden = false;
356 }elseif( 'hide' == $acf_visibility && empty( $acf['value'] ) ){
357 $hidden = false;
358 }else if( 'hide' == $acf_visibility && !empty( $acf['value'] ) ){
359 $hidden = true;
360 }
361 break;
362
363 default:
364 # code...
365 break;
366 }
367
368 // //do return to bypass other conditions
369 $hidden = apply_filters( 'widget_options_visibility_acf', $hidden );
370 if( $hidden ){
371 return false;
372 }
373 }
374 }
375 }
376
377 //login state
378 if( isset( $widget_options['state'] ) && 'activate' == $widget_options['state'] && isset( $opts['roles'] ) ){
379 if( isset( $opts['roles']['state'] ) && !empty( $opts['roles']['state'] ) ){
380 //do state action here
381 if( $opts['roles']['state'] == 'out' && is_user_logged_in() ){
382 return false;
383 }else if( $opts['roles']['state'] == 'in' && !is_user_logged_in() ){
384 return false;
385 }
386 }
387 }
388
389 if( 'activate' == $widget_options['logic'] ){
390 // display widget logic
391 if( isset( $opts['class'] ) && isset( $opts['class']['logic'] ) && !empty( $opts['class']['logic'] ) ){
392 $display_logic = stripslashes( trim( $opts['class']['logic'] ) );
393 $display_logic = apply_filters( 'widget_options_logic_override', $display_logic );
394 $display_logic = apply_filters( 'extended_widget_options_logic_override', $display_logic );
395 if ( $display_logic === false ){
396 return false;
397 }
398 if ( $display_logic === true ){
399 return true;
400 }
401 if ( stristr($display_logic,"return")===false ){
402 $display_logic="return (" . $display_logic . ");";
403 }
404 $display_logic = htmlspecialchars_decode($display_logic, ENT_QUOTES);
405 try {
406 if ( !eval( $display_logic ) ){
407 return false;
408 }
409 } catch (ParseError $e) {
410 return false;
411 }
412 }
413 }
414
415 if( 'activate' == $widget_options['hide_title'] ){
416 //hide widget title
417 if( isset( $instance['title'] ) && isset( $opts['class'] ) && isset( $opts['class']['title'] ) && '1' == $opts['class']['title'] ){
418 $instance['title'] = '';
419 }
420 }
421
422 return $instance;
423 }
424 add_filter( 'widget_display_callback', 'widgetopts_display_callback', 50, 3 );
425 endif;
426
427 //Don't show widget title
428 if( !function_exists( 'widgetopts_remove_title' ) ):
429 function widgetopts_remove_title( $widget_title, $instance = array(), $widget_id = '' ){
430 global $widget_options;
431 if ( 'activate' == $widget_options['hide_title'] && is_array( $instance ) && !empty( $instance ) ){
432 foreach ( $instance as $key => $value) {
433 if( substr( $key, 0, 20 ) == 'extended_widget_opts' ){
434 $opts = ( isset( $instance[ $key ] ) ) ? $instance[ $key ] : array();
435
436 if( isset( $opts['class'] ) && isset( $opts['class']['title'] ) && '1' == $opts['class']['title'] ){
437 return;
438 }
439
440 break;
441 }
442 }
443 return $widget_title;
444 }else{
445 return ( $widget_title );
446 }
447 }
448 add_filter( 'widget_title', 'widgetopts_remove_title', 10, 4 );
449 endif;
450
451 /*
452 * Add custom classes on dynamic_sidebar_params filter
453 */
454 if( !function_exists( 'widgetopts_add_classes' ) ):
455 function widgetopts_add_classes( $params ){
456 global $widget_options, $wp_registered_widget_controls;
457 $classe_to_add = '';
458 $id_base = $wp_registered_widget_controls[ $params[0]['widget_id'] ]['id_base'];
459 $instance = get_option( 'widget_' . $id_base );
460
461 $num = substr( $params[0]['widget_id'], -1 );
462 if( isset( $wp_registered_widget_controls[ $params[0]['widget_id'] ]['params'][0]['number'] ) ){
463 $num = $wp_registered_widget_controls[ $params[0]['widget_id'] ]['params'][0]['number'];
464 } elseif( isset($wp_registered_widget_controls[ $params[0]['widget_id'] ]['callback']) && is_array($wp_registered_widget_controls[ $params[0]['widget_id'] ]['callback'])){
465 if (isset($wp_registered_widget_controls[ $params[0]['widget_id'] ]['callback'][0]) && isset( $wp_registered_widget_controls[ $params[0]['widget_id'] ]['callback'][0]->number)) {
466 $num = $wp_registered_widget_controls[ $params[0]['widget_id'] ]['callback'][0]->number;
467 }
468 }
469 if( isset( $instance[ $num ] ) ){
470 $opts = ( isset( $instance[ $num ][ 'extended_widget_opts-'. $params[0]['widget_id'] ] ) ) ? $instance[ $num ][ 'extended_widget_opts-'. $params[0]['widget_id'] ] : array();
471 }else{
472 $opts = array();
473 }
474
475 $custom_class = isset( $opts['class'] ) ? $opts['class'] : '';
476 $widget_id_set = $params[0]['widget_id'];
477
478 if( 'activate' == $widget_options['classes'] && isset( $widget_options['settings']['classes'] ) ){
479 //don't add the IDs when the setting is set to NO
480 if( isset( $widget_options['settings']['classes']['id'] ) ){
481 if( is_array( $custom_class ) && isset( $custom_class['id'] ) && !empty( $custom_class['id'] ) ){
482 $params[0]['before_widget'] = preg_replace( '/id="[^"]*/', "id=\"{$custom_class['id']}", $params[0]['before_widget'], 1 );
483 $widget_id_set = $custom_class['id'];
484 }
485 }
486
487 }
488
489 $get_classes = widgetopts_classes_generator( $opts, $widget_options, $widget_options['settings'] );
490
491 //double check array
492 if( !is_array( $get_classes ) ){
493 $get_classes = array();
494 }
495
496 if( 'activate' == $widget_options['classes'] ){
497 if( isset( $widget_options['settings']['classes']['auto'] ) ){
498 //do nothing
499 }else{
500 //check if widget class exists
501 if ( ( strpos( $params[0]['before_widget'], '"widget ' ) !== false ) ||
502 ( strpos( $params[0]['before_widget'], ' widget ' ) !== false ) ||
503 ( strpos( $params[0]['before_widget'], ' widget"' ) !== false)
504 ) {
505 //do nothing
506 }else{
507 $get_classes[] = 'widget';
508 }
509 }
510 }
511
512 if( !empty( $get_classes ) ){
513 $classes = 'class="'. ( implode( ' ', $get_classes ) ) . ' ';
514 $params[0]['before_widget'] = str_replace('class="', $classes, $params[0]['before_widget']);
515 }
516
517 // $params[0]['before_widget'] = str_replace('class="', ' data-animation="asdf" class="', $params[0]['before_widget']);
518
519 return $params;
520 }
521 add_filter( 'dynamic_sidebar_params', 'widgetopts_add_classes' );
522 endif;
523
524 ?>
525