Jake Vanderwerf
2026-02-11 6110744a00d28db84216ceb5313fbb10fe7b5609
inc/meta/Storage.php
@@ -34,6 +34,16 @@
         return $this->getWpDefault($item, $name);
      }
      // Taxonomy fields are stored in term_relationships, not meta
      $config = $item->getFieldConfig($name);
      if ($config
         && (
            ($config['type'] ?? '') === 'taxonomy'
            || (($config['type']??'') === 'selector' && ($config['subtype']??'') === 'taxonomy')
         ) && !isset($config['taxonomy_type'])) {
         return $this->getTaxonomyField($item, $config);
      }
      $metaKey = BASE . $name;
      return match ($item->objectType) {
@@ -56,23 +66,52 @@
      $defaults = Item::WP_DEFAULTS[$item->objectType] ?? [];
      $wpFields = array_intersect($defaults, $fieldNames);
      $metaFields = array_diff($fieldNames, $wpFields);
      // Separate taxonomy fields from regular meta fields
      $taxonomyFields = [];
      $metaFields = [];
      foreach (array_diff($fieldNames, $wpFields) as $name) {
         $config = $item->getFieldConfig($name);
         if ($config
            && (
               ($config['type'] ?? '') === 'taxonomy'
               || (($config['type']??'') === 'selector' && ($config['subtype']??'') === 'taxonomy')
            ) && !isset($config['taxonomy_type'])) {
            $taxonomyFields[$name] = $config;
         } else {
            $metaFields[] = $name;
         }
      }
      $values = [];
      // Get meta fields in bulk query
      if (!empty($metaFields)) {
         $values = $this->bulkGetMeta($item, $metaFields);
      }
      // Get WP default fields
      foreach ($wpFields as $name) {
         $values[$name] = $this->getWpDefault($item, $name);
      }
      foreach ($taxonomyFields as $name => $config) {
         $values[$name] = $this->getTaxonomyField($item, $config);
      }
      return $values;
   }
   protected function getTaxonomyField(Item $item, array $config): string
   {
      $taxonomy = jvbCheckBase($config['taxonomy']);
      $terms = wp_get_object_terms($item->id, $taxonomy, ['fields' => 'ids']);
      if (is_wp_error($terms) || empty($terms)) {
         return '';
      }
      return implode(',', $terms);
   }
   /**
    * Save a single field
    */
@@ -426,6 +465,9 @@
      $value = $field->value;
      if (in_array($name, ['featured_image', 'post_thumbnail'])) {
         if (empty($value)) {
            return delete_post_thumbnail($item->id);
         }
         return set_post_thumbnail($item->id, $value) !== false;
      }
@@ -698,8 +740,20 @@
            set_post_thumbnail($id, $fields['post_thumbnail']);
            unset($fields['post_thumbnail']);
         }
         if (isset($fields['post_thumbnail'])) {
            if (empty($fields['post_thumbnail'])) {
               delete_post_thumbnail($id);
            } else {
               set_post_thumbnail($id, $fields['post_thumbnail']);
            }
            unset($fields['post_thumbnail']);
         }
         if (isset($fields['featured_image'])) {
            set_post_thumbnail($id, $fields['featured_image']);
            if (empty($fields['featured_image'])) {
               delete_post_thumbnail($id);
            } else {
               set_post_thumbnail($id, $fields['featured_image']);
            }
            unset($fields['featured_image']);
         }