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