From d27c7e53c828285f2080dcaa6ac224224f61795f Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 10 Feb 2026 22:12:35 +0000
Subject: [PATCH] =Meta Storage.php refactor for accessing taxonomies

---
 inc/meta/Storage.php |   46 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/inc/meta/Storage.php b/inc/meta/Storage.php
index e8216d7..a3925d8 100644
--- a/inc/meta/Storage.php
+++ b/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,53 @@
 
 		$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']);
+		error_log('Getting taxonomy field for taxonomy: '.print_r($taxonomy, true));
+		$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
 	 */

--
Gitblit v1.10.0