cmb2-custom-multiple-selectbox.php
1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
/**
* CMB2 Select Multiple Custom Field Type.
*
* @package CMB2 Select Multiple Field Type.
*/
/**
* Adds a custom field type for select multiples.
*
* @param object $field The CMB2_Field type object.
* @param string $escaped_value The saved (and escaped) value.
* @param int $object_id The current post ID.
* @param string $object_type The current object type.
* @param object $field_type_object The CMB2_Types object.
* @return void
*/
function cmb2_render_select_multiple_field_type( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
$select_multiple = '<select class="widefat" multiple name="' . $field->args['_name'] . '[]" id="' . $field->args['_id'] . '"';
foreach ( $field->args['attributes'] as $attribute => $value ) {
$select_multiple .= " $attribute=\"$value\"";
}
$select_multiple .= ' />';
foreach ( $field->options() as $value => $name ) {
$selected = ( $escaped_value && in_array( $value, $escaped_value, true ) ) ? 'selected="selected"' : '';
$select_multiple .= '<option class="cmb2-option" value="' . esc_attr( $value ) . '" ' . $selected . '>' . esc_html( $name ) . '</option>';
}
$select_multiple .= '</select>';
$select_multiple .= $field_type_object->_desc( true );
echo $select_multiple; // WPCS: XSS ok.
}
add_action( 'cmb2_render_select_multiple', 'cmb2_render_select_multiple_field_type', 10, 5 );
/**
* Sanitize the selected value.
*
* @param object $override_value The override_value.
* @param object $value The value.
*/
function cmb2_sanitize_select_multiple_callback( $override_value, $value ) {
if ( is_array( $value ) ) {
foreach ( $value as $key => $saved_value ) {
$value[ $key ] = sanitize_text_field( $saved_value );
}
return $value;
}
return;
}
add_filter( 'cmb2_sanitize_select_multiple', 'cmb2_sanitize_select_multiple_callback', 10, 2 );