', $field['field_name'], $field['id'], $field['multiple'] ? ' multiple="multiple"' : '' ); $option = ''; foreach ( $field['options'] as $value => $label ) { $html .= sprintf( $option, $value, selected( in_array( $value, $meta ), true, false ), $label ); } $html .= ''; return $html; } /** * Get meta value * If field is cloneable, value is saved as a single entry in DB * Otherwise value is saved as multiple entries (for backward compatibility) * * @see "save" method for better understanding * * TODO: A good way to ALWAYS save values in single entry in DB, while maintaining backward compatibility * * @param $meta * @param $post_id * @param $saved * @param $field * * @return array */ static function meta( $meta, $post_id, $saved, $field ) { $single = $field['clone'] || !$field['multiple']; return (array) get_post_meta( $post_id, $field['id'], $single ); } /** * Save meta value * If field is cloneable, value is saved as a single entry in DB * Otherwise value is saved as multiple entries (for backward compatibility) * * TODO: A good way to ALWAYS save values in single entry in DB, while maintaining backward compatibility * * @param $new * @param $old * @param $post_id * @param $field */ static function save( $new, $old, $post_id, $field ) { if ( !$field['clone'] ) { anim8_Meta_Box::save( $new, $old, $post_id, $field ); return; } if ( empty( $new ) ) delete_post_meta( $post_id, $field['id'] ); else update_post_meta( $post_id, $field['id'], $new ); } /** * Normalize parameters for field * * @param array $field * * @return array */ static function normalize_field( $field ) { $field['field_name'] = $field['id']; if ( !$field['clone'] && $field['multiple'] ) $field['field_name'] .= '[]'; return $field; } } }