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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
<?php
class CMB2_Type_Taxonomy_Select extends CMB2_Type_Taxonomy_Base {
public $current_term = null;
public $saved_term = null;
public function render() {
return $this->rendered(
$this->types->select( array(
'options' => $this->get_term_options(),
) )
);
}
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, 'strong' );
}
$this->saved_term = $this->get_object_term_or_default();
$option_none = $this->field->args( 'show_option_none' );
$options = '';
if ( ! empty( $option_none ) ) {
$field_id = $this->_id( '', false );
$option_none_value = apply_filters( 'cmb2_taxonomy_select_default_value', '' );
$option_none_value = apply_filters( "cmb2_taxonomy_select_{$field_id}_default_value", $option_none_value );
$options .= $this->select_option( array(
'label' => $option_none,
'value' => $option_none_value,
'checked' => $this->saved_term == $option_none_value,
) );
}
$options .= $this->loop_terms( $all_terms, $this->saved_term );
return $options;
}
protected function loop_terms( $all_terms, $saved_term ) {
$options = '';
foreach ( $all_terms as $term ) {
$this->current_term = $term;
$options .= $this->select_option( array(
'label' => $term->name,
'value' => $term->slug,
'checked' => $this->saved_term === $term->slug,
) );
}
return $options;
}
}