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 / widgets / display.php
widget-options / includes / widgets Last commit date
gutenberg 1 year ago option-tabs 1 year ago display.php 1 year ago extras.php 2 years ago widgets.php 2 years ago
display.php
696 lines
1 <?php
2
3 /**
4 * Handles Front-end Display
5 *
6 * @copyright Copyright (c) 2015, Jeffrey Carandang
7 * @since 1.0
8 */
9 // Exit if accessed directly
10 if (!defined('ABSPATH')) exit;
11
12 /**
13 * Handles widget_display_callback filter
14 *
15 * @since 1.0
16 * @global $widget_options
17 * @return $instance
18 */
19
20 //check if function exists
21 if (!function_exists('widgetopts_display_callback')) :
22 function widgetopts_display_callback($instance, $widget, $args)
23 {
24 global $widget_options, $current_user, $pagenow, $wp_customize;
25
26 if (empty($instance['extended_widget_opts-' . $widget->id]) && isset($instance['content']) && !empty($instance['content'])) {
27 $block = parse_blocks($instance['content']);
28 if (!empty($block[0]) && !empty($block[0]['attrs']) && !empty($block[0]['attrs']['extended_widget_opts'])) {
29 $instance['extended_widget_opts-' . $widget->id] = $block[0]['attrs']['extended_widget_opts'];
30 }
31 }
32
33 if (isset($wp_customize)) {
34 } else if ($pagenow === 'widgets.php' || (defined('REST_REQUEST') && REST_REQUEST)) {
35 return $instance;
36 }
37
38 // WPML FIX
39 $hasWPML = has_filter('wpml_current_language');
40 $hasWPML = (function_exists('pll_the_languages')) ? false : $hasWPML;
41 $default_language = $hasWPML ? apply_filters('wpml_default_language', NULL) : false;
42
43 $hidden = false;
44 $opts = (isset($instance['extended_widget_opts-' . $widget->id])) ? $instance['extended_widget_opts-' . $widget->id] : array();
45 $visibility = array('show' => array(), 'hide' => array());
46
47 //wordpress pages
48 $visibility = isset($opts['visibility']) ? $opts['visibility'] : array();
49 $visibility_opts = isset($opts['visibility']['options']) ? $opts['visibility']['options'] : 'hide';
50
51 $is_misc = ('activate' == $widget_options['visibility'] && isset($widget_options['settings']['visibility']) && isset($widget_options['settings']['visibility']['misc'])) ? true : false;
52 $is_types = ('activate' == $widget_options['visibility'] && isset($widget_options['settings']['visibility']) && isset($widget_options['settings']['visibility']['post_type'])) ? true : false;
53 $is_tax = ('activate' == $widget_options['visibility'] && isset($widget_options['settings']['visibility']) && isset($widget_options['settings']['visibility']['taxonomies'])) ? true : false;
54
55 //check device
56 if ($widget_options['devices'] == 'activate' && isset($opts['devices']) && !empty($opts['devices'])) {
57
58 //for mobile and tablet
59 if (wp_is_mobile() || widgetopts_is_mobile() || widgetopts_is_tablet()) {
60 //mobile
61 // if (!widgetopts_is_tablet()) {
62 // if (empty($opts['devices']['options']) || $opts['devices']['options'] == 'hide') {
63 // if (isset($opts['devices']['mobile']) && $opts['devices']['mobile'] == '1') {
64 // $hidden = true;
65 // }
66 // } else if ($opts['devices']['options'] == 'show') {
67 // if (!isset($opts['devices']['mobile']) || empty($opts['devices']['mobile'])) {
68 // $hidden = true;
69 // }
70 // }
71
72 // $hidden = apply_filters('widget_options_devices_mobile', $hidden);
73 // if ($hidden) {
74 // return false;
75 // }
76 // } else {
77 // //tablet
78 // if (empty($opts['devices']['options']) || $opts['devices']['options'] == 'hide') {
79 // if (isset($opts['devices']['tablet']) && $opts['devices']['tablet'] == '1') {
80 // $hidden = true;
81 // }
82 // } else if ($opts['devices']['options'] == 'show') {
83 // if (!isset($opts['devices']['tablet']) || empty($opts['devices']['tablet'])) {
84 // $hidden = true;
85 // }
86 // }
87
88 // $hidden = apply_filters('widget_options_devices_tablet', $hidden);
89 // if ($hidden) {
90 // return false;
91 // }
92 // }
93
94 //for a time being filter
95 if (empty($opts['devices']['options']) || $opts['devices']['options'] == 'hide') {
96 //if both tablet and mobile are set then hide the widget
97 if (
98 isset($opts['devices']['mobile']) && $opts['devices']['mobile'] == '1' &&
99 isset($opts['devices']['tablet']) && $opts['devices']['tablet'] == '1'
100 ) {
101 $hidden = true;
102 } else {
103 //else do nothing and css will make the final decision
104 }
105 } else if ($opts['devices']['options'] == 'show') {
106 //if both tablet and mobile are set then hide the widget
107 if ((!isset($opts['devices']['mobile']) || empty($opts['devices']['mobile'])) &&
108 (!isset($opts['devices']['tablet']) || empty($opts['devices']['tablet']))
109 ) {
110 $hidden = true;
111 } else {
112 //else do nothing and css will make the final decision
113 }
114 }
115
116 $hidden = apply_filters('widget_options_devices_mobile', $hidden);
117 if ($hidden) {
118 return false;
119 }
120 } else {
121 //for desktop
122 if (empty($opts['devices']['options']) || $opts['devices']['options'] == 'hide') {
123 if (isset($opts['devices']['desktop']) && $opts['devices']['desktop'] == '1') {
124 $hidden = true;
125 }
126 } else if ($opts['devices']['options'] == 'show') {
127 if (!isset($opts['devices']['desktop']) || empty($opts['devices']['desktop'])) {
128 $hidden = true;
129 }
130 }
131
132 $hidden = apply_filters('widget_options_devices_desktop', $hidden);
133 if ($hidden) {
134 return false;
135 }
136 }
137 }
138
139 $isWooPage = false;
140 if (class_exists('WooCommerce')) {
141 $wooPageID = 0;
142
143 $wooPageID = (is_shop()) ? get_option('woocommerce_shop_page_id') : $wooPageID;
144 if ($wooPageID) {
145 $isWooPage = true;
146
147 $visibility['pages'] = !empty($visibility['pages']) ? $visibility['pages'] : [];
148 if ($visibility_opts == 'hide' && (array_key_exists($wooPageID, $visibility['pages']) || in_array($wooPageID, $visibility['pages']))) {
149 $hidden = true; //hide if exists on hidden pages
150 } elseif ($visibility_opts == 'show' && !array_key_exists($wooPageID, $visibility['pages']) && !in_array($wooPageID, $visibility['pages'])) {
151 $hidden = true; //hide if doesn't exists on visible pages
152 }
153
154 //do return to bypass other conditions
155 $hidden = apply_filters('widget_options_visibility_page', $hidden);
156
157 if ($hidden) {
158 return false;
159 }
160 }
161 }
162
163 // Normal Pages
164 if (!$isWooPage) {
165 if ($is_misc && ((is_home() && is_front_page()) || is_front_page())) {
166 if (isset($visibility['misc']['home']) && $visibility_opts == 'hide') {
167 $hidden = true; //hide if checked on hidden pages
168 } elseif (!isset($visibility['misc']['home']) && $visibility_opts == 'show') {
169 $hidden = true; //hide if not checked on visible pages
170 }
171
172 //do return to bypass other conditions
173 $hidden = apply_filters('widget_options_visibility_home', $hidden);
174 if ($hidden) {
175 return false;
176 }
177 } elseif ($is_misc && ((!is_front_page() && is_home()))) { //filter for blog page
178 if (isset($visibility['misc']['blog']) && $visibility_opts == 'hide') {
179 $hidden = true; //hide if checked on hidden pages
180 } elseif (!isset($visibility['misc']['blog']) && $visibility_opts == 'show') {
181 $hidden = true; //hide if not checked on visible pages
182 }
183
184 //do return to bypass other conditions
185 $hidden = apply_filters('widget_options_visibility_blog', $hidden);
186 if ($hidden) {
187 return false;
188 }
189 } elseif ($is_tax && is_category()) {
190 if (!isset($visibility['categories'])) {
191 $visibility['categories'] = array();
192 }
193
194 if (isset($visibility['tax_terms']['category'])) {
195 $visibility['categories'] = $visibility['tax_terms']['category'];
196 }
197
198 $selected_taxterms_page = 1;
199 if (isset($visibility['tax_terms_page']) && isset($visibility['tax_terms_page']['category'])) {
200 $selected_taxterms_page = $visibility['tax_terms_page']['category'];
201 }
202
203 //for taxonomy category checking
204 if (!isset($visibility['taxonomies'])) {
205 $visibility['taxonomies'] = array();
206 }
207 //check first the category taxonomy
208 if ($visibility_opts == 'hide' && array_key_exists('category', $visibility['taxonomies'])) {
209 $hidden = true; //hide if exists on hidden pages
210 } elseif ($visibility_opts == 'show' && !array_key_exists('category', $visibility['taxonomies'])) {
211 $hidden = true; //hide if doesn't exists on visible pages
212 }
213
214 // WPML TRANSLATION OBJECT FIX
215 $category_id = ($hasWPML) ? apply_filters('wpml_object_id', get_query_var('cat'), 'category', true, $default_language) : get_query_var('cat');
216
217 if ($visibility_opts == 'hide' && ((array_key_exists($category_id, $visibility['categories']) && $visibility['categories'][$category_id] == '1') || (in_array($category_id, $visibility['categories']) && ($selected_taxterms_page == 1 || $selected_taxterms_page == 2)) || ($is_misc && isset($visibility['misc']['archives'])))) {
218 $hidden = true; //hide if exists on hidden pages
219 } elseif ($visibility_opts == 'show' && ((!array_key_exists($category_id, $visibility['categories']) && empty($visibility['categories'][$category_id])) && !(in_array($category_id, $visibility['categories']) && ($selected_taxterms_page == 1 || $selected_taxterms_page == 2)) && !($is_misc && isset($visibility['misc']['archives'])))) {
220 $hidden = true; //hide if doesn't exists on visible pages
221 } elseif (((array_key_exists($category_id, $visibility['categories']) && $visibility['categories'][$category_id] == '1') || (in_array($category_id, $visibility['categories']) && ($selected_taxterms_page == 1 || $selected_taxterms_page == 2))) && $visibility_opts == 'hide') {
222 $hidden = true; //hide to all categories
223 } elseif (((array_key_exists($category_id, $visibility['categories']) && $visibility['categories'][$category_id] == '1') || (in_array($category_id, $visibility['categories']) && ($selected_taxterms_page == 1 || $selected_taxterms_page == 2)) || ($is_misc && isset($visibility['misc']['archives']))) && $visibility_opts == 'show') {
224 $hidden = false; //hide to all categories
225 }
226
227 if ($visibility_opts == 'show' && array_key_exists('category', $visibility['taxonomies'])) {
228 $hidden = false; //hide if doesn't exists on visible pages
229 }
230
231 //do return to bypass other conditions
232 $hidden = apply_filters('widget_options_visibility_categories', $hidden);
233 if ($hidden) {
234 return false;
235 }
236 } elseif ($is_tax && is_tag()) {
237 if (!isset($visibility['tags'])) {
238 $visibility['tags'] = array();
239 }
240
241 if (((isset($visibility['taxonomies']['post_tag']) || ($is_misc && isset($visibility['misc']['archives']))) && $visibility_opts == 'hide') ||
242 ((!isset($visibility['taxonomies']['post_tag']) && !($is_misc && isset($visibility['misc']['archives']))) && $visibility_opts == 'show')
243 ) {
244 $hidden = true; //hide to all tags
245 } elseif (isset($visibility['taxonomies']['post_tag']) && $visibility_opts == 'show') {
246 $hidden = false; //hide to all tags
247 }
248
249 //do return to bypass other conditions
250 $hidden = apply_filters('widget_options_visibility_tags', $hidden);
251 if ($hidden) {
252 return false;
253 }
254 } elseif ($is_tax && is_tax()) {
255 $term = get_queried_object();
256 if (!isset($visibility['taxonomies'])) {
257 $visibility['taxonomies'] = array();
258 }
259
260 if ($visibility_opts == 'hide' && (!is_null($term) && isset($term->taxonomy) && (array_key_exists($term->taxonomy, $visibility['taxonomies'])) || ($is_misc && is_archive() && isset($visibility['misc']['archives'])))) {
261 $hidden = true; //hide if exists on hidden pages
262 } elseif ($visibility_opts == 'show' && !(!is_null($term) && isset($term->taxonomy) && array_key_exists($term->taxonomy, $visibility['taxonomies'])) && !($is_misc && is_archive() && isset($visibility['misc']['archives']))) {
263 $hidden = true; //hide if doesn't exists on visible pages
264 }
265
266 //do return to bypass other conditions
267 $hidden = apply_filters('widget_options_visibility_taxonomies', $hidden);
268 if ($hidden) {
269 return false;
270 }
271 } elseif ($is_misc && is_archive()) {
272 if (isset($visibility['misc']['archives']) && $visibility_opts == 'hide') {
273 $hidden = true; //hide if checked on hidden pages
274 } elseif (!isset($visibility['misc']['archives']) && $visibility_opts == 'show') {
275 $hidden = true; //hide if not checked on visible pages
276 }
277
278 //do return to bypass other conditions
279 $hidden = apply_filters('widget_options_visibility_archives', $hidden);
280 if ($hidden) {
281 return false;
282 }
283 } elseif ($is_misc && is_404()) {
284 if (isset($visibility['misc']['404']) && $visibility_opts == 'hide') {
285 $hidden = true; //hide if checked on hidden pages
286 } elseif (!isset($visibility['misc']['404']) && $visibility_opts == 'show') {
287 $hidden = true; //hide if not checked on visible pages
288 }
289
290 //do return to bypass other conditions
291 $hidden = apply_filters('widget_options_visibility_404', $hidden);
292 if ($hidden) {
293 return false;
294 }
295 } elseif ($is_misc && is_search()) {
296 if (isset($visibility['misc']['search']) && $visibility_opts == 'hide') {
297 $hidden = true; //hide if checked on hidden pages
298 } elseif (!isset($visibility['misc']['search']) && $visibility_opts == 'show') {
299 $hidden = true; //hide if not checked on visible pages
300 }
301
302 //do return to bypass other conditions
303 $hidden = apply_filters('widget_options_visibility_search', $hidden);
304 if ($hidden) {
305 return false;
306 }
307 } elseif (is_single() && !is_page()) {
308 global $post;
309 $type = '';
310 if (!$post) {
311 $current_post = get_post();
312 $type = $current_post->post_type;
313 } else {
314 $type = $post->post_type;
315 }
316
317 if ($is_misc) {
318 if (isset($visibility['misc']['single']) && $visibility_opts == 'show') {
319 return $instance;
320 }
321 }
322
323 if (isset($visibility['tax_terms']['category'])) {
324 $visibility['categories'] = $visibility['tax_terms']['category'];
325 }
326
327 $selected_taxterms_page = 1;
328 if (isset($visibility['tax_terms_page']) && isset($visibility['tax_terms_page']['category'])) {
329 $selected_taxterms_page = $visibility['tax_terms_page']['category'];
330 }
331
332 if (!isset($visibility['types'])) {
333 $visibility['types'] = array();
334 }
335 if ($visibility_opts == 'hide' && (array_key_exists($type, $visibility['types']) || ($is_misc && isset($visibility['misc']['single'])))) {
336 $hidden = true; //hide if exists on hidden pages
337 } elseif ($visibility_opts == 'show' && (!array_key_exists($type, $visibility['types']) && (($is_misc && (!isset($visibility['misc']['single']))) || !$is_misc))) {
338 $hidden = true; //hide if doesn't exists on visible pages
339 }
340
341 // do return to bypass other conditions
342 $hidden = apply_filters('widget_options_visibility_types', $hidden);
343 //hide posts assign on category
344 if (!isset($visibility['categories'])) {
345 $visibility['categories'] = array();
346 }
347 if (isset($visibility['categories']['all_categories']) && $visibility_opts == 'hide') {
348 $hidden = true; //hide to all categories
349 } elseif (isset($visibility['categories']['all_categories']) && $visibility_opts == 'show') {
350 $hidden = false; //hide to all categories
351 } elseif (!isset($visibility['categories']['all_categories']) && !empty($visibility['categories'])) {
352 $cats = wp_get_post_categories(get_the_ID());
353 if (is_array($cats) && !empty($cats)) {
354 $checked_cats = array_keys($visibility['categories']);
355 $checked_cats = (intval($checked_cats[0]) == 0) ? $visibility['categories'] : $checked_cats;
356 $intersect = array_intersect($cats, $checked_cats);
357 if (!empty($intersect) && $visibility_opts == 'hide') {
358 if ($selected_taxterms_page == 1 || $selected_taxterms_page == 3) {
359 $hidden = true;
360 }
361 } elseif (!empty($intersect) && $visibility_opts == 'show') {
362 if ($selected_taxterms_page == 1 || $selected_taxterms_page == 3) {
363 $hidden = false;
364 }
365 }
366 }
367 }
368 // do return to bypass other conditions
369 $hidden = apply_filters('widget_options_visibility_post_category', $hidden);
370 if ($hidden) {
371 return false;
372 }
373 // echo $type;
374 } elseif ($is_types && (is_page() || get_post_type(get_the_ID()) == 'page')) {
375 global $post;
376
377 // WPML FIX
378 $page_id = get_queried_object_id();
379 $parent_id = wp_get_post_parent_id($page_id);
380
381 $pageID = ($hasWPML) ? apply_filters('wpml_object_id', $page_id, 'page', true, $default_language) : $page_id;
382 $parentID = ($hasWPML) ? apply_filters('wpml_object_id', $parent_id, 'page', true, $default_language) : $parent_id;
383
384 //do post type condition first
385 if (isset($visibility['types']) && isset($visibility['types']['page'])) {
386 if ($visibility_opts == 'hide' && array_key_exists('page', $visibility['types'])) {
387 $hidden = true; //hide if exists on hidden pages
388 } elseif ($visibility_opts == 'show' && !array_key_exists('page', $visibility['types'])) {
389 $hidden = true; //hide if doesn't exists on visible pages
390 }
391 } else {
392 //do per pages condition
393 if (!isset($visibility['pages'])) {
394 $visibility['pages'] = array();
395 }
396
397 $page_in_array = in_array($pageID, $visibility['pages']);
398 //for the compatibility of the data of lower version 3.8.10 and below
399 if (array_key_exists($pageID, $visibility['pages'])) {
400 if ($visibility['pages'][$pageID] == 1) {
401 $page_in_array = true;
402 }
403 }
404
405 if ($visibility_opts == 'hide' && $page_in_array) {
406 $hidden = true; //hide if exists on hidden pages
407 } elseif ($visibility_opts == 'show' && $pageID == 0) {
408 //for old versin v3.8.10 and below, need to resave the widget option
409 if (!in_array($pageID, $visibility['pages'])) {
410 $hidden = true;
411 }
412 } elseif ($visibility_opts == 'show' && !$page_in_array) {
413 $hidden = true; //hide if doesn't exists on visible pages
414 }
415 }
416 //do return to bypass other conditions
417 $hidden = apply_filters('widget_options_visibility_page', $hidden);
418 if ($hidden) {
419 return false;
420 }
421 }
422 }
423 //end wordpress pages
424
425
426 //ACF
427 if (isset($widget_options['acf']) && 'activate' == $widget_options['acf']) {
428 if (isset($visibility['acf']['field']) && !empty($visibility['acf']['field'])) {
429 $acf = get_field_object($visibility['acf']['field']);
430
431 if ($acf && is_array($acf)) {
432 $acf_visibility = (isset($visibility['acf']) && isset($visibility['acf']['visibility'])) ? $visibility['acf']['visibility'] : 'hide';
433
434 //handle repeater fields
435 if (isset($acf['value'])) {
436 if (is_array($acf['value'])) {
437 $acf['value'] = implode(', ', array_map(function ($acf_array_value) {
438 $acf_implode = '';
439 if (is_array($acf_array_value)) {
440 $acf_implode = implode(',', array_filter($acf_array_value));
441 } else {
442 $acf_implode = $acf_array_value;
443 }
444 return $acf_implode;
445 }, $acf['value']));
446 }
447 }
448
449 switch ($visibility['acf']['condition']) {
450 case 'equal':
451 if (isset($acf['value'])) {
452 if ('show' == $acf_visibility && $acf['value'] == $visibility['acf']['value']) {
453 $hidden = false;
454 } else if ('show' == $acf_visibility && $acf['value'] != $visibility['acf']['value']) {
455 $hidden = true;
456 } else if ('hide' == $acf_visibility && $acf['value'] == $visibility['acf']['value']) {
457 $hidden = true;
458 } else if ('hide' == $acf_visibility && $acf['value'] != $visibility['acf']['value']) {
459 $hidden = false;
460 }
461 }
462 break;
463
464 case 'not_equal':
465 if (isset($acf['value'])) {
466 if ('show' == $acf_visibility && $acf['value'] == $visibility['acf']['value']) {
467 $hidden = true;
468 } else if ('show' == $acf_visibility && $acf['value'] != $visibility['acf']['value']) {
469 $hidden = false;
470 } else if ('hide' == $acf_visibility && $acf['value'] == $visibility['acf']['value']) {
471 $hidden = false;
472 } else if ('hide' == $acf_visibility && $acf['value'] != $visibility['acf']['value']) {
473 $hidden = true;
474 }
475 }
476 break;
477
478 case 'contains':
479 if (isset($acf['value'])) {
480 if ('show' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) !== false) {
481 $hidden = false;
482 } else if ('show' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) === false) {
483 $hidden = true;
484 } else if ('hide' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) !== false) {
485 $hidden = true;
486 } else if ('hide' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) === false) {
487 $hidden = false;
488 }
489 }
490 break;
491
492 case 'not_contains':
493 if (isset($acf['value'])) {
494 if ('show' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) !== false) {
495 $hidden = true;
496 } else if ('show' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) === false) {
497 $hidden = false;
498 } else if ('hide' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) !== false) {
499 $hidden = false;
500 } else if ('hide' == $acf_visibility && strpos($acf['value'], $visibility['acf']['value']) === false) {
501 $hidden = true;
502 }
503 }
504 break;
505
506 case 'empty':
507 if ('show' == $acf_visibility && empty($acf['value'])) {
508 $hidden = false;
509 } else if ('show' == $acf_visibility && !empty($acf['value'])) {
510 $hidden = true;
511 } elseif ('hide' == $acf_visibility && empty($acf['value'])) {
512 $hidden = true;
513 } else if ('hide' == $acf_visibility && !empty($acf['value'])) {
514 $hidden = false;
515 }
516 break;
517
518 case 'not_empty':
519 if ('show' == $acf_visibility && empty($acf['value'])) {
520 $hidden = true;
521 } else if ('show' == $acf_visibility && !empty($acf['value'])) {
522 $hidden = false;
523 } elseif ('hide' == $acf_visibility && empty($acf['value'])) {
524 $hidden = false;
525 } else if ('hide' == $acf_visibility && !empty($acf['value'])) {
526 $hidden = true;
527 }
528 break;
529
530 default:
531 # code...
532 break;
533 }
534
535 // //do return to bypass other conditions
536 $hidden = apply_filters('widget_options_visibility_acf', $hidden);
537 if ($hidden) {
538 return false;
539 }
540 }
541 }
542 }
543
544 //login state
545 if (isset($widget_options['state']) && 'activate' == $widget_options['state'] && isset($opts['roles'])) {
546 if (isset($opts['roles']['state']) && !empty($opts['roles']['state'])) {
547 //do state action here
548 if ($opts['roles']['state'] == 'out' && is_user_logged_in()) {
549 return false;
550 } else if ($opts['roles']['state'] == 'in' && !is_user_logged_in()) {
551 return false;
552 }
553 }
554 }
555
556 if ('activate' == $widget_options['logic']) {
557 // display widget logic
558 if (isset($opts['class']) && isset($opts['class']['logic']) && !empty($opts['class']['logic'])) {
559 $display_logic = stripslashes(trim($opts['class']['logic']));
560 $display_logic = apply_filters('widget_options_logic_override', $display_logic);
561 $display_logic = apply_filters('extended_widget_options_logic_override', $display_logic);
562 if ($display_logic === false) {
563 return false;
564 }
565 if ($display_logic === true) {
566 return true;
567 }
568 // if (stristr($display_logic, "return") === false) {
569 // $display_logic = "return (" . $display_logic . ");";
570 // }
571 $display_logic = htmlspecialchars_decode($display_logic, ENT_QUOTES);
572 if (!widgetopts_safe_eval($display_logic)) {
573 return false;
574 }
575 }
576 }
577
578 if ('activate' == $widget_options['hide_title']) {
579 //hide widget title
580 if (isset($instance['title']) && isset($opts['class']) && isset($opts['class']['title']) && '1' == $opts['class']['title']) {
581 $instance['title'] = '';
582 }
583 }
584
585 return $instance;
586 }
587 add_filter('widget_display_callback', 'widgetopts_display_callback', 50, 3);
588 endif;
589
590 //Don't show widget title
591 if (!function_exists('widgetopts_remove_title')) :
592 function widgetopts_remove_title($widget_title, $instance = array(), $widget_id = '')
593 {
594 global $widget_options;
595 if ('activate' == $widget_options['hide_title'] && is_array($instance) && !empty($instance)) {
596 foreach ($instance as $key => $value) {
597 if (substr($key, 0, 20) == 'extended_widget_opts') {
598 $opts = (isset($instance[$key])) ? (array)$instance[$key] : array();
599
600 if (isset($opts['class']) && isset($opts['class']['title']) && '1' == $opts['class']['title']) {
601 return;
602 }
603
604 break;
605 }
606 }
607 return $widget_title;
608 } else {
609 return ($widget_title);
610 }
611 }
612 add_filter('widget_title', 'widgetopts_remove_title', 10, 4);
613 endif;
614
615 /*
616 * Add custom classes on dynamic_sidebar_params filter
617 */
618 if (!function_exists('widgetopts_add_classes')) :
619 function widgetopts_add_classes($params)
620 {
621 global $widget_options, $wp_registered_widget_controls;
622 $classe_to_add = '';
623 $id_base = $wp_registered_widget_controls[$params[0]['widget_id']]['id_base'];
624 $instance = get_option('widget_' . $id_base);
625
626 $num = substr($params[0]['widget_id'], -1);
627 if (isset($wp_registered_widget_controls[$params[0]['widget_id']]['params'][0]['number'])) {
628 $num = $wp_registered_widget_controls[$params[0]['widget_id']]['params'][0]['number'];
629 } elseif (isset($wp_registered_widget_controls[$params[0]['widget_id']]['callback']) && is_array($wp_registered_widget_controls[$params[0]['widget_id']]['callback'])) {
630 if (isset($wp_registered_widget_controls[$params[0]['widget_id']]['callback'][0]) && isset($wp_registered_widget_controls[$params[0]['widget_id']]['callback'][0]->number)) {
631 $num = $wp_registered_widget_controls[$params[0]['widget_id']]['callback'][0]->number;
632 }
633 }
634 if (isset($instance[$num])) {
635 $opts = (isset($instance[$num]['extended_widget_opts-' . $params[0]['widget_id']])) ? $instance[$num]['extended_widget_opts-' . $params[0]['widget_id']] : array();
636 if (empty($opts) && isset($instance[$num]['content']) && !empty($instance[$num]['content'])) {
637 /* if $opts is empty, try to get data from blocks */
638 $block = parse_blocks($instance[$num]['content']);
639 if (!empty($block[0]) && !empty($block[0]['attrs'])) {
640 if (!empty($block[0]['attrs']['extended_widget_opts'])) {
641 $opts = $block[0]['attrs']['extended_widget_opts'];
642 }
643 }
644 }
645 } else {
646 $opts = array();
647 }
648
649 $custom_class = isset($opts['class']) ? $opts['class'] : '';
650 $widget_id_set = $params[0]['widget_id'];
651
652 if ('activate' == $widget_options['classes'] && isset($widget_options['settings']['classes'])) {
653 //don't add the IDs when the setting is set to NO
654 if (isset($widget_options['settings']['classes']['id'])) {
655 if (is_array($custom_class) && isset($custom_class['id']) && !empty($custom_class['id'])) {
656 $params[0]['before_widget'] = preg_replace('/id="[^"]*/', "id=\"{$custom_class['id']}", $params[0]['before_widget'], 1);
657 $widget_id_set = $custom_class['id'];
658 }
659 }
660 }
661
662 $get_classes = widgetopts_classes_generator($opts, $widget_options, $widget_options['settings']);
663
664 //double check array
665 if (!is_array($get_classes)) {
666 $get_classes = array();
667 }
668
669 if ('activate' == $widget_options['classes']) {
670 if (isset($widget_options['settings']['classes']['auto'])) {
671 //do nothing
672 } else {
673 //check if widget class exists
674 if ((strpos($params[0]['before_widget'], '"widget ') !== false) ||
675 (strpos($params[0]['before_widget'], ' widget ') !== false) ||
676 (strpos($params[0]['before_widget'], ' widget"') !== false)
677 ) {
678 //do nothing
679 } else {
680 $get_classes[] = 'widget';
681 }
682 }
683 }
684
685 if (!empty($get_classes)) {
686 $classes = 'class="' . (implode(' ', $get_classes)) . ' ';
687 $params[0]['before_widget'] = str_replace('class="', $classes, $params[0]['before_widget']);
688 }
689
690 // $params[0]['before_widget'] = str_replace('class="', ' data-animation="asdf" class="', $params[0]['before_widget']);
691
692 return $params;
693 }
694 add_filter('dynamic_sidebar_params', 'widgetopts_add_classes');
695 endif;
696