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