/**
  * This function correctly parses (and optionally formats) a meta value.
  *
  * @see wpptd_get_post_meta_values()
  * @see wpptd_get_post_meta_value()
  * @see wpptd_get_term_meta_values()
  * @see wpptd_get_term_meta_value()
  * @since 0.5.0
  * @param mixed $meta_value the meta value to parse (or format)
  * @param WPPTD\Components\Field|WPPTD\Components\TermField $field the field component the meta value belongs to
  * @param null|boolean $single whether to force arrays or no arrays being returned (default is to not force anything)
  * @param boolean $formatted whether to return automatically formatted values, ready for output (default is false)
  * @return mixed the parsed (or formatted) meta value
  */
 public static function parse_meta_value($meta_value, $field, $single = null, $formatted = false)
 {
     $_meta_value = $meta_value;
     $meta_value = null;
     $type_hint = $field->validate_meta_value(null, true);
     if (is_array($type_hint)) {
         $meta_value = $field->_field->parse($_meta_value, $formatted);
         if ($single !== null && $single) {
             if (count($meta_value > 0)) {
                 $meta_value = $meta_value[0];
             } else {
                 $meta_value = null;
             }
         }
     } else {
         if (count($_meta_value) > 0) {
             $meta_value = $field->_field->parse($_meta_value[0], $formatted);
         } else {
             $meta_value = $field->_field->parse($field->default, $formatted);
         }
         if ($single !== null && !$single) {
             $meta_value = array($meta_value);
         }
     }
     return $meta_value;
 }
 /**
  * Validates a meta value.
  *
  * @since 0.6.0
  * @param WPPTD\Components\TermField $field field object to validate the meta value for
  * @param mixed $meta_value the meta value to validate
  * @param mixed $meta_value_old the previous meta value
  * @return array an array containing the validated value, a variable possibly containing a WP_Error object and a boolean value whether the meta value has changed
  */
 protected function validate_meta_value($field, $meta_value, $meta_value_old)
 {
     $meta_value = $field->validate_meta_value($meta_value);
     $error = false;
     $changed = false;
     if (is_wp_error($meta_value)) {
         $error = $meta_value;
         $meta_value = $meta_value_old;
     } elseif ($meta_value != $meta_value_old) {
         /**
          * This action can be used to perform additional steps when the meta value for a specific field of this taxonomy has been updated.
          *
          * @since 0.6.0
          * @param mixed the updated meta value
          * @param mixed the previous meta value
          */
         do_action('wpptd_update_term_meta_value_' . $this->slug . '_' . $field->slug, $meta_value, $meta_value_old);
         $changed = true;
     }
     return array($meta_value, $error, $changed);
 }