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 / widgets.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
widgets.php
277 lines
1 <?php
2
3 /**
4 * Add Widget Options
5 *
6 * Process Managing of Widget Options.
7 *
8 * @copyright Copyright (c) 2016, Jeffrey Carandang
9 * @since 2.0
10 */
11 // Exit if accessed directly
12 if (!defined('ABSPATH')) exit;
13
14
15
16 /**
17 * Output widget search filter textfield before widget lists
18 *
19 * @since 3.3
20 */
21 if (!function_exists('widgetopts_add_search_input')) :
22 function widgetopts_add_search_input()
23 {
24 global $widget_options;
25 if (isset($widget_options['search']) && 'activate' == $widget_options['search']) : ?>
26 <div id="widgetopts-widgets-filter">
27 <label class="screen-reader-text" for="widgetopts-widgets-search"><?php _e('Search Widgets', 'widget-options'); ?></label>
28 <input type="text" id="widgetopts-widgets-search" class="widgetopts-widgets-search" placeholder="<?php esc_attr_e('Search widgets&hellip;', 'widget-options') ?>" />
29 <div class="widgetopts-search-icon" aria-hidden="true"></div>
30 <button type="button" class="widgetopts-clear-results"><span class="screen-reader-text"><?php _e('Clear Results', 'widget-options'); ?></span></button>
31 <p class="screen-reader-text" id="widgetopts-search-desc"><?php _e('The search results will be updated as you type.', 'widget-options'); ?></p>
32 </div>
33 <?php
34 endif;
35 }
36 add_action('widgets_admin_page', 'widgetopts_add_search_input');
37 endif;
38
39 /**
40 * Add Options on in_widget_form action
41 *
42 * @since 2.0
43 * @return void
44 */
45
46 function widgetopts_in_widget_form($widget, $return, $instance)
47 {
48 global $widget_options, $wp_registered_widget_controls;
49 $width = (isset($wp_registered_widget_controls[$widget->id]['width'])) ? (int) $wp_registered_widget_controls[$widget->id]['width'] : 250;
50 $opts = (isset($instance['extended_widget_opts-' . $widget->id])) ? $instance['extended_widget_opts-' . $widget->id] : array();
51 $is_siteorigin = (isset($widget_options['siteorigin'])) ? $widget_options['siteorigin'] : '';
52
53 /* if $opts is empty, try to get data from blocks */
54 if (!wp_use_widgets_block_editor()) {
55 if (empty($instance['extended_widget_opts-' . $widget->id])) {
56 if (isset($instance['content']) && !empty($instance['content'])) {
57 $block = parse_blocks($instance['content']);
58 if (!empty($block[0]) && !empty($block[0]['attrs'])) {
59 if (!empty($block[0]['attrs']['extended_widget_opts'])) {
60 $opts = $block[0]['attrs']['extended_widget_opts'];
61 }
62 }
63 }
64 }
65 }
66
67 /** change widget names for SO Pagebuilder support **/
68 if (isset($widget->id) && 'temp' == $widget->id) {
69 $namespace = 'widgets[' . $widget->number . ']';
70 $optsname = 'widgets[' . $widget->number . '][extended_widget_opts_name]';
71 $opts = (isset($instance['extended_widget_opts'])) ? $instance['extended_widget_opts'] : array();
72 $widget->id = $widget->number;
73
74 //create siteorigin pagebuilder variable
75 echo '<input type="hidden" name="' . $namespace . '[siteorigin]" value="1" />';
76 } else {
77 $namespace = 'extended_widget_opts-' . $widget->id;
78 $optsname = 'extended_widget_opts_name';
79 }
80
81 $args = array(
82 'width' => $width,
83 'id' => $widget->id,
84 'params' => $opts,
85 'namespace' => $namespace
86 );
87 $selected = 0;
88 if (isset($opts['tabselect'])) {
89 $selected = $opts['tabselect'];
90 }
91
92 ?>
93
94 <input type="hidden" name="extended_widget_opts_name" value="extended_widget_opts-<?php echo $widget->id; ?>">
95 <input type="hidden" name="<?php echo $args['namespace']; ?>[extended_widget_opts][id_base]" value="<?php echo $widget->id; ?>" />
96 <div class="extended-widget-opts-form <?php if ($width > 480) {
97 echo 'extended-widget-opts-form-large';
98 } else if ($width <= 480) {
99 echo 'extended-widget-opts-form-small';
100 } ?>">
101 <div class="extended-widget-opts-tabs">
102 <ul class="extended-widget-opts-tabnav-ul">
103 <?php do_action('extended_widget_opts_tabs', $args); ?>
104 <div class="extended-widget-opts-clearfix"></div>
105 </ul>
106
107 <?php do_action('extended_widget_opts_tabcontent', $args); ?>
108 <input type="hidden" id="extended-widget-opts-selectedtab" value="<?php echo $selected; ?>" name="extended_widget_opts-<?php echo $args['id']; ?>[extended_widget_opts][tabselect]" />
109 <div class="extended-widget-opts-clearfix"></div>
110 </div><!-- end .extended-widget-opts-tabs -->
111 </div><!-- end .extended-widget-opts-form -->
112
113 <?php if ('activate' == $is_siteorigin) { ?>
114 <script type="text/javascript">
115 jQuery(document).ready(function($) {
116 if ($('.so-content .extended-widget-opts-tabs').length > 0) {
117 $('.extended-widget-opts-tabs').tabs({
118 active: 1
119 });
120 $('.extended-widget-opts-visibility-tabs').tabs({
121 active: 0
122 });
123 $('.extended-widget-opts-settings-tabs').tabs({
124 active: 0
125 });
126 }
127 });
128 </script>
129 <?php } else { ?>
130 <style type="text/css">
131 .so-content.panel-dialog .extended-widget-opts-form {
132 display: none;
133 }
134 </style>
135 <?php } ?>
136
137 <?php
138 }
139 add_action('in_widget_form', 'widgetopts_in_widget_form', 10, 3);
140
141 /*
142 * Update Options
143 */
144 function widgetopts_ajax_update_callback($instance, $new_instance, $this_widget)
145 {
146 global $widget_options;
147
148 if (
149 isset($_POST['extended_widget_opts_name']) ||
150 (!isset($_POST['extended_widget_opts_name']) && isset($new_instance['siteorigin']))
151 ) {
152 //check if from SO pagebuilder
153 if (is_array($new_instance) && isset($new_instance['extended_widget_opts']) && isset($new_instance['siteorigin'])) {
154 $name = 'extended_widget_opts';
155 $options = widgetopts_sanitize_array($new_instance);
156 } else {
157 $name = strip_tags($_POST['extended_widget_opts_name']);
158 $options = $_POST[$name];
159 }
160 if (isset($options['extended_widget_opts'])) {
161 // update_option( $name , $options['extended_widget_opts'] );
162 if (isset($options['extended_widget_opts']['class']['link']) && !empty($options['extended_widget_opts']['class']['link'])) {
163 $options['extended_widget_opts']['class']['link'] = widgetopts_addhttp($options['extended_widget_opts']['class']['link']);
164 }
165 $instance[$name] = widgetopts_sanitize_array($options['extended_widget_opts']);
166
167 //remove cache
168 if (isset($options['extended_widget_opts']['id_base']) && isset($widget_options['cache']) && 'activate' == $widget_options['cache']) {
169 $transient_name = 'widgetopts-cache_' . $options['extended_widget_opts']['id_base'];
170 delete_transient($transient_name);
171 }
172
173 //remove widgetopts attribute from blocks when it is classic editor
174 if (!empty($instance['content'])) {
175 $block = parse_blocks($instance['content']);
176 if (!empty($block[0]) && !empty($block[0]['attrs'])) {
177 if (!empty($block[0]['attrs']['extended_widget_opts'])) {
178 unset($block[0]['attrs']['extended_widget_opts']);
179 $instance['content'] = serialize_blocks($block);
180 }
181 }
182 }
183 }
184 }
185 return $instance;
186 }
187 add_filter('widget_update_callback', 'widgetopts_ajax_update_callback', 10, 3);
188
189 add_filter('widget_form_callback', function ($instance, $widget) {
190 /* if $opts is empty, try to get data from blocks */
191 if (!wp_use_widgets_block_editor()) {
192 if (empty($instance['extended_widget_opts-' . $widget->id])) {
193 if (isset($instance['content']) && !empty($instance['content'])) {
194 $block = parse_blocks($instance['content']);
195 if (!empty($block[0]) && !empty($block[0]['attrs'])) {
196 if (!empty($block[0]['attrs']['extended_widget_opts'])) {
197 $instance['extended_widget_opts-' . $widget->id] = $block[0]['attrs']['extended_widget_opts'];
198 }
199 }
200 }
201 }
202
203 //remove widgetopts attribute from blocks when it is classic editor
204 if (!empty($instance['content'])) {
205 $blocks = parse_blocks($instance['content']);
206 if (is_array($blocks) && is_iterable($blocks)) {
207
208 foreach ($blocks as &$block) {
209 if (!empty($block) && !empty($block['attrs'])) {
210 $is_there_a_changes = false;
211 $_block = widgetopts_unset_block_attributes($block);
212 if ($_block !== false) {
213 $block = $_block;
214 $is_there_a_changes = true;
215 }
216
217 //inner blocks
218 if (isset($block['innerBlocks']) && is_array($block['innerBlocks']) && !empty($block['innerBlocks'])) {
219
220 foreach ($block['innerBlocks'] as &$block2) {
221 $_block2 = widgetopts_unset_block_attributes($block2);
222 if ($_block2 !== false) {
223 $block2 = $_block2;
224
225 $is_there_a_changes = true;
226 }
227
228 //2nd level inner blocks
229 if (isset($block2['innerBlocks']) && is_array($block2['innerBlocks']) && !empty($block2['innerBlocks'])) {
230
231 foreach ($block2['innerBlocks'] as &$block3) {
232 $_block3 = widgetopts_unset_block_attributes($block3);
233 if ($_block3 !== false) {
234 $block3 = $_block3;
235 $is_there_a_changes = true;
236 }
237 }
238 }
239 }
240 }
241
242 if ($is_there_a_changes) {
243 $instance['content'] = serialize_blocks($blocks);
244 break;
245 }
246 }
247 }
248 }
249 }
250 }
251
252 return $instance;
253 }, 100, 2);
254
255 function widgetopts_unset_block_attributes($block)
256 {
257 $is_there_a_changes = false;
258 if (!empty($block) && !empty($block['attrs'])) {
259 if (!empty($block['attrs']['extended_widget_opts'])) {
260 unset($block['attrs']['extended_widget_opts']);
261 $is_there_a_changes = true;
262 }
263
264 if (!empty($block['attrs']['extended_widget_opts_state'])) {
265 unset($block['attrs']['extended_widget_opts_state']);
266 $is_there_a_changes = true;
267 }
268
269 if (!empty($block['attrs']['extended_widget_opts_clientid'])) {
270 unset($block['attrs']['extended_widget_opts_clientid']);
271 $is_there_a_changes = true;
272 }
273 }
274
275 return $is_there_a_changes ? $block : false;
276 }
277 ?>