/**
  * HTML output of meta fields group
  *
  * @param object $post  The post object
  * @param array  $fargs The settings of this field
  *
  * @return string
  */
 static function _field_meta($post, $fargs)
 {
     $html = array();
     // Sets up global post data
     setup_postdata($post);
     foreach ($fargs as $meta => $val) {
         if (!$val) {
             continue;
         }
         switch ($meta) {
             case 'date':
                 // Get date wrapper class
                 $date_class = apply_filters(PT_CV_PREFIX_ . 'field_meta_class', 'entry-date', 'date');
                 $prefix_text = apply_filters(PT_CV_PREFIX_ . 'field_meta_prefix_text', '', 'date');
                 $date = apply_filters(PT_CV_PREFIX_ . 'field_meta_date_final', get_the_date('', $post), get_the_time('U'));
                 $html['date'] = sprintf('<span class="%s">%s <time datetime="%s">%s</time></span>', esc_html($date_class), balanceTags($prefix_text), esc_attr(get_the_date('c')), esc_html($date));
                 break;
             case 'taxonomy':
                 // Get terms wrapper class
                 $term_class = apply_filters(PT_CV_PREFIX_ . 'field_meta_class', 'terms', 'terms');
                 $prefix_text = apply_filters(PT_CV_PREFIX_ . 'field_meta_prefix_text', __('in', PT_CV_DOMAIN), 'terms');
                 $terms = PT_CV_Functions::post_terms($post);
                 if (!empty($terms)) {
                     $term_html = sprintf('<span class="%s">%s %s</span>', esc_attr($term_class), balanceTags($prefix_text), balanceTags($terms));
                     $html['taxonomy'] = apply_filters(PT_CV_PREFIX_ . 'field_term_html', $term_html, $terms);
                 }
                 break;
             case 'comment':
                 if (!post_password_required() && (comments_open() || get_comments_number())) {
                     // Get comment wrapper class
                     $comment_class = apply_filters(PT_CV_PREFIX_ . 'field_meta_class', 'comments-link', 'comment');
                     $prefix_text = apply_filters(PT_CV_PREFIX_ . 'field_meta_prefix_text', '', 'comment');
                     ob_start();
                     comments_popup_link(__('Leave a comment', PT_CV_DOMAIN), __('1 Comment', PT_CV_DOMAIN), __('% Comments', PT_CV_DOMAIN));
                     $comment_content = ob_get_clean();
                     $html['comment'] = sprintf('<span class="%s">%s %s</span>', esc_attr($comment_class), balanceTags($prefix_text), $comment_content);
                 }
                 break;
             case 'author':
                 // Get author wrapper class
                 $author_class = apply_filters(PT_CV_PREFIX_ . 'field_meta_class', 'author', 'author');
                 $prefix_text = apply_filters(PT_CV_PREFIX_ . 'field_meta_prefix_text', __('by', PT_CV_DOMAIN), 'author');
                 $author_html = sprintf('<span class="%s">%s <a href="%s" rel="author">%s</a></span>', esc_attr($author_class), balanceTags($prefix_text), esc_url(get_author_posts_url(get_the_author_meta('ID'))), get_the_author());
                 $html['author'] = apply_filters(PT_CV_PREFIX_ . 'field_meta_author_html', $author_html, $post);
                 break;
             default:
                 break;
         }
     }
     // Merge fields, or let them as seperate items in array
     $merge_fields = apply_filters(PT_CV_PREFIX_ . 'field_meta_merge_fields', true);
     if ($merge_fields) {
         $result = PT_CV_Html::_field_meta_wrap($html);
     } else {
         $result = $html;
     }
     return $result;
 }