/**
* Get post meta
*
* @param string $key Meta key. Required.
* @param int|null $post_id Post ID. null for current post. Optional
* @param array $args Array of arguments. Optional.
*
* @return mixed
*/
public static function meta($key, $args = array(), $post_id = null)
{
$post_id = empty($post_id) ? get_the_ID() : $post_id;
$args = wp_parse_args($args, array('type' => 'text', 'multiple' => false, 'clone' => false));
// Always set 'multiple' true for following field types
if (in_array($args['type'], array('checkbox_list', 'autocomplete', 'file', 'file_advanced', 'image', 'image_advanced', 'plupload_image', 'thickbox_image'))) {
$args['multiple'] = true;
}
$field = array('id' => $key, 'type' => $args['type'], 'clone' => $args['clone'], 'multiple' => $args['multiple']);
$class = RW_Meta_Box::get_class_name($field);
switch ($args['type']) {
case 'taxonomy_advanced':
if (empty($args['taxonomy'])) {
break;
}
$meta = get_post_meta($post_id, $key, !$args['multiple']);
$term_ids = wp_parse_id_list($meta);
// Allow to pass more arguments to "get_terms"
$func_args = wp_parse_args(array('include' => $term_ids, 'hide_empty' => false), $args);
unset($func_args['type'], $func_args['taxonomy'], $func_args['multiple']);
$meta = get_terms($args['taxonomy'], $func_args);
break;
case 'taxonomy':
$meta = empty($args['taxonomy']) ? array() : get_the_terms($post_id, $args['taxonomy']);
break;
case 'map':
$field = array('id' => $key, 'multiple' => false, 'clone' => false);
$meta = RWMB_Map_Field::the_value($field, $args, $post_id);
break;
case 'oembed':
$meta = RWMB_OEmbed_Field::the_value($field, $args, $post_id);
break;
default:
$meta = call_user_func(array($class, 'get_value'), $field, $args, $post_id);
break;
}
return apply_filters('rwmb_meta', $meta, $key, $args, $post_id);
}