PluginProbe
Advanced Custom Fields (ACF®) / 5.9.0
Advanced Custom Fields (ACF®) v5.9.0
6.8.9 6.8.8 6.8.7 6.8.6 6.8.5 6.8.4 6.8.3 6.8.2 6.8.1 5.8.5 5.8.6 5.8.7 5.8.8 5.8.9 5.9.0 5.9.1 5.9.2 5.9.3 5.9.4 5.9.5 5.9.6 5.9.7 5.9.8 5.9.9 6.0.0 All 230 releases
advanced-custom-fields / includes / acf-input-functions.php
acf-input-functions.php
473 lines 8.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * acf_filter_attrs
5 *
6 * Filters out empty attrs from the provided array.
7 *
8 * @date 11/6/19
9 * @since 5.8.1
10 *
11 * @param array $attrs The array of attrs.
12 * @return array
13 */
14 function acf_filter_attrs( $attrs ) {
15
16 // Filter out empty attrs but allow "0" values.
17 $filtered = array_filter( $attrs, 'acf_not_empty' );
18
19 // Correct specific attributes (required="required").
20 foreach( array('required', 'readonly', 'disabled', 'multiple') as $key ) {
21 unset($filtered[ $key ]);
22 if( !empty($attrs[ $key ]) ) {
23 $filtered[ $key ] = $key;
24 }
25 }
26 return $filtered;
27 }
28
29 /**
30 * acf_esc_attrs
31 *
32 * Generated valid HTML from an array of attrs.
33 *
34 * @date 11/6/19
35 * @since 5.8.1
36 *
37 * @param array $attrs The array of attrs.
38 * @return string
39 */
40 function acf_esc_attrs( $attrs ) {
41 $html = '';
42
43 // Loop over attrs and validate data types.
44 foreach( $attrs as $k => $v ) {
45
46 // String (but don't trim value).
47 if( is_string($v) && ($k !== 'value') ) {
48 $v = trim($v);
49
50 // Boolean
51 } elseif( is_bool($v) ) {
52 $v = $v ? 1 : 0;
53
54 // Object
55 } elseif( is_array($v) || is_object($v) ) {
56 $v = json_encode($v);
57 }
58
59 // Generate HTML.
60 $html .= sprintf( ' %s="%s"', esc_attr($k), esc_attr($v) );
61 }
62
63 // Return trimmed.
64 return trim( $html );
65 }
66
67 /**
68 * acf_esc_html
69 *
70 * Encodes <script> tags for safe HTML output.
71 *
72 * @date 12/6/19
73 * @since 5.8.1
74 *
75 * @param string $string
76 * @return string
77 */
78 function acf_esc_html( $string = '' ) {
79 $string = strval($string);
80
81 // Encode "<script" tags to invalidate DOM elements.
82 if( strpos($string, '<script') !== false ) {
83 $string = str_replace('<script', htmlspecialchars('<script'), $string);
84 $string = str_replace('</script', htmlspecialchars('</script'), $string);
85 }
86 return $string;
87 }
88
89 /**
90 * acf_html_input
91 *
92 * Returns the HTML of an input.
93 *
94 * @date 13/6/19
95 * @since 5.8.1
96 *
97 * @param array $attrs The array of attrs.
98 * @return string
99 */
100 //function acf_html_input( $attrs = array() ) {
101 // return sprintf( '<input %s/>', acf_esc_attrs($attrs) );
102 //}
103
104 /**
105 * acf_hidden_input
106 *
107 * Renders the HTML of a hidden input.
108 *
109 * @date 3/02/2014
110 * @since 5.0.0
111 *
112 * @param array $attrs The array of attrs.
113 * @return string
114 */
115 function acf_hidden_input( $attrs = array() ) {
116 echo acf_get_hidden_input( $attrs );
117 }
118
119 /**
120 * acf_get_hidden_input
121 *
122 * Returns the HTML of a hidden input.
123 *
124 * @date 3/02/2014
125 * @since 5.0.0
126 *
127 * @param array $attrs The array of attrs.
128 * @return string
129 */
130 function acf_get_hidden_input( $attrs = array() ) {
131 return sprintf( '<input type="hidden" %s/>', acf_esc_attrs($attrs) );
132 }
133
134 /**
135 * acf_text_input
136 *
137 * Renders the HTML of a text input.
138 *
139 * @date 3/02/2014
140 * @since 5.0.0
141 *
142 * @param array $attrs The array of attrs.
143 * @return string
144 */
145 function acf_text_input( $attrs = array() ) {
146 echo acf_get_text_input( $attrs );
147 }
148
149 /**
150 * acf_get_text_input
151 *
152 * Returns the HTML of a text input.
153 *
154 * @date 3/02/2014
155 * @since 5.0.0
156 *
157 * @param array $attrs The array of attrs.
158 * @return string
159 */
160 function acf_get_text_input( $attrs = array() ) {
161 $attrs = wp_parse_args($attrs, array(
162 'type' => 'text'
163 ));
164 return sprintf( '<input %s/>', acf_esc_attrs($attrs) );
165 }
166
167 /**
168 * acf_file_input
169 *
170 * Renders the HTML of a file input.
171 *
172 * @date 3/02/2014
173 * @since 5.0.0
174 *
175 * @param array $attrs The array of attrs.
176 * @return string
177 */
178 function acf_file_input( $attrs = array() ) {
179 echo acf_get_file_input( $attrs );
180 }
181
182 /**
183 * acf_get_file_input
184 *
185 * Returns the HTML of a file input.
186 *
187 * @date 3/02/2014
188 * @since 5.0.0
189 *
190 * @param array $attrs The array of attrs.
191 * @return string
192 */
193 function acf_get_file_input( $attrs = array() ) {
194 return sprintf( '<input type="file" %s/>', acf_esc_attrs($attrs) );
195 }
196
197 /**
198 * acf_textarea_input
199 *
200 * Renders the HTML of a textarea input.
201 *
202 * @date 3/02/2014
203 * @since 5.0.0
204 *
205 * @param array $attrs The array of attrs.
206 * @return string
207 */
208 function acf_textarea_input( $attrs = array() ) {
209 echo acf_get_textarea_input( $attrs );
210 }
211
212 /**
213 * acf_get_textarea_input
214 *
215 * Returns the HTML of a textarea input.
216 *
217 * @date 3/02/2014
218 * @since 5.0.0
219 *
220 * @param array $attrs The array of attrs.
221 * @return string
222 */
223 function acf_get_textarea_input( $attrs = array() ) {
224 $value = '';
225 if( isset($attrs['value']) ) {
226 $value = $attrs['value'];
227 unset( $attrs['value'] );
228 }
229 return sprintf( '<textarea %s>%s</textarea>', acf_esc_attrs($attrs), esc_textarea($value) );
230 }
231
232 /**
233 * acf_checkbox_input
234 *
235 * Renders the HTML of a checkbox input.
236 *
237 * @date 3/02/2014
238 * @since 5.0.0
239 *
240 * @param array $attrs The array of attrs.
241 * @return string
242 */
243 function acf_checkbox_input( $attrs = array() ) {
244 echo acf_get_checkbox_input( $attrs );
245 }
246
247 /**
248 * acf_get_checkbox_input
249 *
250 * Returns the HTML of a checkbox input.
251 *
252 * @date 3/02/2014
253 * @since 5.0.0
254 *
255 * @param array $attrs The array of attrs.
256 * @return string
257 */
258 function acf_get_checkbox_input( $attrs = array() ) {
259
260 // Allow radio or checkbox type.
261 $attrs = wp_parse_args($attrs, array(
262 'type' => 'checkbox'
263 ));
264
265 // Get label.
266 $label = '';
267 if( isset($attrs['label']) ) {
268 $label= $attrs['label'];
269 unset( $attrs['label'] );
270 }
271
272 // Render.
273 $checked = isset($attrs['checked']);
274 return '<label' . ($checked ? ' class="selected"' : '') . '><input ' . acf_esc_attr($attrs) . '/> ' . acf_esc_html($label) . '</label>';
275 }
276
277 /**
278 * acf_radio_input
279 *
280 * Renders the HTML of a radio input.
281 *
282 * @date 3/02/2014
283 * @since 5.0.0
284 *
285 * @param array $attrs The array of attrs.
286 * @return string
287 */
288 function acf_radio_input( $attrs = array() ) {
289 echo acf_get_radio_input( $attrs );
290 }
291
292 /**
293 * acf_get_radio_input
294 *
295 * Returns the HTML of a radio input.
296 *
297 * @date 3/02/2014
298 * @since 5.0.0
299 *
300 * @param array $attrs The array of attrs.
301 * @return string
302 */
303 function acf_get_radio_input( $attrs = array() ) {
304 $attrs['type'] = 'radio';
305 return acf_get_checkbox_input( $attrs );
306 }
307
308 /**
309 * acf_select_input
310 *
311 * Renders the HTML of a select input.
312 *
313 * @date 3/02/2014
314 * @since 5.0.0
315 *
316 * @param array $attrs The array of attrs.
317 * @return string
318 */
319 function acf_select_input( $attrs = array() ) {
320 echo acf_get_select_input( $attrs );
321 }
322
323 /**
324 * acf_select_input
325 *
326 * Returns the HTML of a select input.
327 *
328 * @date 3/02/2014
329 * @since 5.0.0
330 *
331 * @param array $attrs The array of attrs.
332 * @return string
333 */
334 function acf_get_select_input( $attrs = array() ) {
335 $value = (array) acf_extract_var( $attrs, 'value' );
336 $choices = (array) acf_extract_var( $attrs, 'choices' );
337 return sprintf(
338 '<select %s>%s</select>',
339 acf_esc_attrs($attrs),
340 acf_walk_select_input($choices, $value)
341 );
342 }
343
344 /**
345 * acf_walk_select_input
346 *
347 * Returns the HTML of a select input's choices.
348 *
349 * @date 27/6/17
350 * @since 5.6.0
351 *
352 * @param array $choices The choices to walk through.
353 * @param array $values The selected choices.
354 * @param array $depth The current walk depth.
355 * @return string
356 */
357 function acf_walk_select_input( $choices = array(), $values = array(), $depth = 0 ) {
358 $html = '';
359
360 // Sanitize values for 'selected' matching (only once).
361 if( $depth == 0 ) {
362 $values = array_map('esc_attr', $values);
363 }
364
365 // Loop over choices and append to html.
366 if( $choices ) {
367 foreach( $choices as $value => $label ) {
368
369 // Multiple (optgroup)
370 if( is_array($label) ){
371 $html .= sprintf(
372 '<optgroup label="%s">%s</optgroup>',
373 esc_attr($value),
374 acf_walk_select_input( $label, $values, $depth+1 )
375 );
376
377 // single (option)
378 } else {
379 $attrs = array(
380 'value' => $value
381 );
382
383 // If is selected.
384 $pos = array_search( esc_attr($value), $values );
385 if( $pos !== false ) {
386 $attrs['selected'] = 'selected';
387 $attrs['data-i'] = $pos;
388 }
389 $html .= sprintf( '<option %s>%s</option>', acf_esc_attr($attrs), esc_html($label) );
390 }
391 }
392 }
393 return $html;
394 }
395
396 /**
397 * acf_clean_atts
398 *
399 * See acf_filter_attrs().
400 *
401 * @date 3/10/17
402 * @since 5.6.3
403 *
404 * @param array $attrs The array of attrs.
405 * @return string
406 */
407 function acf_clean_atts( $attrs ) {
408 return acf_filter_attrs( $attrs );
409 }
410
411 /**
412 * acf_esc_atts
413 *
414 * See acf_esc_attrs().
415 *
416 * @date 27/6/17
417 * @since 5.6.0
418 *
419 * @param array $attrs The array of attrs.
420 * @return string
421 */
422 function acf_esc_atts( $attrs ) {
423 return acf_esc_attrs( $attrs );
424 }
425
426 /**
427 * acf_esc_attr
428 *
429 * See acf_esc_attrs().
430 *
431 * @date 13/6/19
432 * @since 5.8.1
433 * @deprecated 5.6.0
434 *
435 * @param array $attrs The array of attrs.
436 * @return string
437 */
438 function acf_esc_attr( $attrs ) {
439 return acf_esc_attrs( $attrs );
440 }
441
442 /**
443 * acf_esc_attr_e
444 *
445 * See acf_esc_attrs().
446 *
447 * @date 13/6/19
448 * @since 5.8.1
449 * @deprecated 5.6.0
450 *
451 * @param array $attrs The array of attrs.
452 * @return string
453 */
454 function acf_esc_attr_e( $attrs ) {
455 echo acf_esc_attrs( $attrs );
456 }
457
458 /**
459 * acf_esc_atts_e
460 *
461 * See acf_esc_attrs().
462 *
463 * @date 13/6/19
464 * @since 5.8.1
465 * @deprecated 5.6.0
466 *
467 * @param array $attrs The array of attrs.
468 * @return string
469 */
470 function acf_esc_atts_e( $attrs ) {
471 echo acf_esc_attrs( $attrs );
472 }
473