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