/** * Displays meta box fields with current or default values. * */ function display_meta_box_field($post_id, $field) { $field_obj = null; $field['value'] = get_post_meta($post_id, $field['id'], true); // Fix inconsistencies between CPT field array keys and Field obj property names // TODO update CPT field array keys to match Field obj property names if (isset($field['desc'])) { $field['description'] = $field['desc']; unset($field['desc']); } if (isset($field['options'])) { $field['choices'] = $field['options']; unset($field['options']); } switch ($field['type']) { case 'text': $field_obj = new TextField($field); break; case 'textarea': $field_obj = new TextareaField($field); break; case 'select': $field_obj = new SelectField($field); break; case 'multiselect': $field_obj = new MultiselectField($field); break; case 'radio': $field_obj = new RadioField($field); break; case 'checkbox': $field_obj = new CheckboxField($field); break; case 'file': $field['post_id'] = $post_id; $field_obj = new FileField($field); break; default: break; } $markup = ''; if ($field_obj) { ob_start(); ?> <tr> <th><?php echo $field_obj->label_html(); ?> </th> <td> <?php echo $field_obj->description_html(); ?> <?php echo $field_obj->input_html(); ?> </td> </tr> <?php $markup = ob_get_clean(); } else { $markup = '<tr><th></th><td>Don\'t know how to handle field of type ' . $field_type . '</td></tr>'; } echo $markup; }