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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
<?php
class CMB2_Type_Taxonomy_Multicheck extends CMB2_Type_Taxonomy_Base {
protected $counter = 0;
public function render() {
return $this->rendered(
$this->types->radio( array(
'class' => $this->get_wrapper_classes(),
'options' => $this->get_term_options(),
), 'taxonomy_multicheck' )
);
}
protected function get_term_options() {
$all_terms = $this->get_terms();
if ( ! $all_terms || is_wp_error( $all_terms ) ) {
return $this->no_terms_result( $all_terms );
}
return $this->loop_terms( $all_terms, $this->get_object_term_or_default() );
}
protected function loop_terms( $all_terms, $saved_terms ) {
$options = '';
foreach ( $all_terms as $term ) {
$options .= $this->list_term_input( $term, $saved_terms );
}
return $options;
}
protected function list_term_input( $term, $saved_terms ) {
$args = array(
'value' => $term->slug,
'label' => $term->name,
'type' => 'checkbox',
'name' => $this->_name() . '[]',
);
if ( is_array( $saved_terms ) && in_array( $term->slug, $saved_terms ) ) {
$args['checked'] = 'checked';
}
return $this->list_input( $args, ++$this->counter );
}
public function get_object_term_or_default() {
$saved_terms = $this->get_object_terms();
return is_wp_error( $saved_terms ) || empty( $saved_terms )
? $this->field->get_default()
: wp_list_pluck( $saved_terms, 'slug' );
}
protected function get_wrapper_classes() {
$classes = 'cmb2-checkbox-list cmb2-list';
if ( false === $this->field->args( 'select_all_button' ) ) {
$classes .= ' no-select-all';
}
return $classes;
}
}