From d7e7d248cbe41cd7a9ef9c2fb022b6c4831f99a3 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 31 May 2026 15:22:56 +0000
Subject: [PATCH] =jakevan complete

---
 inc/registrar/config/seo/Resolver.php |   45 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/inc/registrar/config/seo/Resolver.php b/inc/registrar/config/seo/Resolver.php
index 918d7a3..99b4586 100644
--- a/inc/registrar/config/seo/Resolver.php
+++ b/inc/registrar/config/seo/Resolver.php
@@ -4,6 +4,7 @@
 use JVBase\managers\Cache;
 use JVBase\managers\SEO\render\Thing\CreativeWork\MediaObject\ImageObject;
 use JVBase\managers\SEO\render\Thing\Intangible\Quantity\Distance;
+use JVBase\managers\SEO\render\Thing\Intangible\StructuredValue\QuantitativeValue;
 use JVBase\meta\Meta;
 use JVBase\registrar\Registrar;
 
@@ -14,7 +15,7 @@
 class Resolver {
 	protected static ?Meta $meta;
 
-	public static function resolve(string $template, ?Meta $meta): string
+	public static function resolve(string $template, ?Meta $meta): string|array|\JVBase\managers\SEO\render\Thing\Thing
 	{
 		if (!$meta) {
 			if (is_singular()){
@@ -24,6 +25,11 @@
 			}
 		}
 		self::$meta = $meta;
+
+		if (preg_match('/^\{\{([^}]+)}}$/', trim($template), $matches)) {
+			return self::resolveVariable($matches[1], $meta);
+		}
+
 		return preg_replace_callback(
 			'/\{\{([^}]+)}}/',
 			fn($matches) => self::resolveVariable($matches[1], $meta),
@@ -33,11 +39,12 @@
 	protected static function resolveVariable(string $variable, ?Meta $meta = null): mixed
 	{
 		$variable = trim($variable);
+
 		switch ($variable) {
 			case 'CREATOR':
 				return JVB()->seo()->getCreator();
 			case 'name':
-				if (is_post_type_archive()) {
+				if (!$meta && is_post_type_archive()) {
 					$obj = get_queried_object();
 
 					$registrar = Registrar::getInstance($obj->name);
@@ -45,9 +52,14 @@
 				}
 				break;
 		}
-		if (str_contains($variable, '.')) {
+
+		if (str_contains($variable, '.') && $meta) {
 			return self::resolveRelation($variable, $meta);
 		}
+		$function = BASE.'resolve_'.$variable;
+		if (function_exists($function)) {
+			return $function($variable, $meta);
+		}
 		if ($meta && $variable === 'post_permalink') {
 			return get_the_permalink($meta->id());
 		}
@@ -62,6 +74,7 @@
 		if ($variable === 'post_content') {
 			return self::resolvePostContent($variable, $meta);
 		}
+
 		return match($config['type']) {
 			'upload', 'image', 'gallery' => self::resolveImage($variable, $meta),
 			'selector', 'taxonomy', 'user', 'post' => self::resolveObject($variable, $meta),
@@ -90,10 +103,12 @@
 		if (!$meta) {
 			return'';
 		}
+
 		$ID = $meta->get($relation);
-		if (!$ID || $ID === '') {
+		if (empty($ID)) {
 			return '';
 		}
+		$IDs = explode(',',$ID);
 			// 2) Create new Meta for that relation
 		$config = $meta->config($relation);
 		if (!$config) {
@@ -113,9 +128,15 @@
 			error_log('[SEO]Meta Resolver. Could not find type for relation: '.$relation.': '.$field);
 			return '';
 		}
-		$newMeta = new Meta($ID, $type);
+
+		$results = [];
+		foreach ($IDs as $ID) {
+			$newMeta = new Meta((int)$ID, $type);
+
 			// 3) Pass to resolver
-		return self::resolve($field, $newMeta);
+			$results[] =  self::resolveVariable($field, $newMeta);
+		}
+		return jvbCommaList($results);
 	}
 
 	protected static function resolvePostContent(string $variable, ?Meta $meta):string{
@@ -160,7 +181,7 @@
 		}
 
 		$ignore = ['description', 'name'];
-		if (!in_array($property, $ignore)) {
+		if (JVB_TESTING && !in_array($property, $ignore)) {
 			error_log('[SEO]Resolver - No method found for '.$property.' with value: '.print_r($value, true).'. Defaulting to base Resolver');
 		}
 
@@ -201,11 +222,13 @@
 				function () use ($imgID, $img) {
 					$imageObject = new ImageObject();
 					$imageObject->setContentUrl($img[0]);
-					$width = new Distance();
-					$width->setName($img[1].' px');
+					$width = new QuantitativeValue();
+					$width->setValue($img[1]);
+					$width->setUnitText('px');
 					$imageObject->setWidth($width);
-					$height = new Distance();
-					$height->setName($img[2].' px');
+					$height = new QuantitativeValue();
+					$height->setValue($img[2]);
+					$width->setUnitText('px');
 					$imageObject->setHeight($height);
 
 					$image_path = get_attached_file($imgID);

--
Gitblit v1.10.0