/** * Walk options * * @param mixed $meta * @param array $field * @param mixed $options * @param mixed $db_fields * * @return string */ public static function walk($field, $options, $db_fields, $meta) { $attributes = self::call('get_attributes', $field, $meta); $walker = new RWMB_Walker_Select($db_fields, $field, $meta); $output = sprintf('<select %s>', self::render_attributes($attributes)); if (false === $field['multiple']) { $output .= $field['placeholder'] ? '<option value="">' . esc_html($field['placeholder']) . '</option>' : ''; } $output .= $walker->walk($options, $field['flatten'] ? -1 : 0); $output .= '</select>'; $output .= self::get_select_all_html($field); return $output; }
function display_level($options, $parent_id = 0, $active = false) { $id = $this->db_fields['id']; $field = $this->field; $walker = new RWMB_Walker_Select($this->db_fields, $field, $this->meta); $attributes = RWMB_Field::call('get_attributes', $field, $this->meta); $children = $options[$parent_id]; $output = sprintf('<div class="rwmb-select-tree %s" data-parent-id="%s"><select %s>', $active ? '' : 'hidden', $parent_id, RWMB_Field::render_attributes($attributes)); $output .= isset($field['placeholder']) ? "<option value=''>{$field['placeholder']}</option>" : '<option></option>'; $output .= $walker->walk($children, -1); $output .= '</select>'; foreach ($children as $c) { if (isset($options[$c->{$id}])) { $output .= $this->display_level($options, $c->{$id}, in_array($c->{$id}, $this->meta) && $active); } } $output .= '</div>'; return $output; }