public static function getValue($id, $details, $default)
    {
        $sep = '-';

        // Check id
        if (empty($id) || null === $id) {
            return null;
        }

        // ~

        // Post field?
        $post = isset($details['post']) ? $details['post'] : 0;

        // Post metaboxes
        if (!empty($post)) {
            $value = self::getPostMeta($post->ID, $post->post_type.$sep.$id);
            $value = empty($value) ? $default : $value;

            return self::cleanValue($value);
        }

        // ~

        // Term field?
        $term = isset($details['term']) ? $details['term'] : 0;

        // Term metaboxes
        if (!empty($term)) {
            $value = self::getTermMeta($term->term_id, $term->taxonomy.$sep.$id, $default);
            $value = empty($value) ? $default : $value;

            return self::cleanValue($value);
        }

        // ~

        // User field?
        $user = isset($details['user']) ? $details['user'] : 0;

        // Term metaboxes
        if (!empty($user)) {
            $value = self::getAuthorMeta($user->ID, $id);
            $value = empty($value) ? $default : $value;

            return self::cleanValue($value);
        }

        // ~

        // Widget field?
        $widget_value = isset($details['widget_value']) ? $details['widget_value'] : '';

        // Widget metaboxes
        if (!empty($widget_value)) {
            return self::cleanValue($widget_value);
        }

        // ~

        // Default action
        $option = isset($details['option']) ? $details['option'] : '';
        $handle = !empty($option) ? $option : $id;
        $value = self::get($id, $default);

        return self::cleanValue($value);
    }