From c19264ac916707096fe294d996a1b7fb85206b34 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 08 Mar 2026 19:55:31 +0000
Subject: [PATCH] =Furthering along the complete refactor. Added some basic setup for is_content taxonomies, including a page for an archive of the terms.
---
inc/registrar/config/seo/Resolver.php | 75 ++++++++++++++++++++++++++++++-------
1 files changed, 61 insertions(+), 14 deletions(-)
diff --git a/inc/registrar/config/seo/Resolver.php b/inc/registrar/config/seo/Resolver.php
index e754477..3f18043 100644
--- a/inc/registrar/config/seo/Resolver.php
+++ b/inc/registrar/config/seo/Resolver.php
@@ -5,15 +5,16 @@
use JVBase\managers\SEO\render\Thing\CreativeWork\MediaObject\ImageObject;
use JVBase\managers\SEO\render\Thing\Intangible\Quantity\Distance;
use JVBase\meta\Meta;
+use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
exit;
}
class Resolver {
- protected static Meta $meta;
+ protected static ?Meta $meta;
- public static function resolve(string $template, Meta $meta): string
+ public static function resolve(string $template, ?Meta $meta): string
{
self::$meta = $meta;
return preg_replace_callback(
@@ -22,17 +23,23 @@
$template
);
}
- protected static function resolveVariable(string $variable, Meta $meta): string
+ protected static function resolveVariable(string $variable, ?Meta $meta = null): mixed
{
$variable = trim($variable);
-
+ switch ($variable) {
+ case 'CREATOR':
+ return JVB()->seo()->getCreator();
+ break;
+ }
if (str_contains($variable, '.')) {
return self::resolveRelation($variable, $meta);
}
- if ($variable === 'post_permalink') {
+ if ($meta && $variable === 'post_permalink') {
return get_the_permalink($meta->id());
}
-
+ if (!$meta) {
+ return '';
+ }
$config = $meta->config($variable);
if (!$config) {
error_log('[SEO]Meta Resolver. Could not find meta configuration for variable: '.$variable);
@@ -45,7 +52,7 @@
};
}
- protected static function resolveRelation(string $path, Meta $meta): string
+ protected static function resolveRelation(string $path, ?Meta $meta = null): string
{
$parts = explode('.', $path);
$relation = array_shift($parts);
@@ -53,6 +60,15 @@
//We need to:
// 1) Get the id of the item we're fetching (meta value of the $relation)
+ if ($relation === 'registrar') {
+ if (count($parts) === 2) {
+ return self::resolveRegistrar($parts[0], $parts[1]);
+ } else {
+ error_log('[Resolver]::resolveRelation: Registrar relation requires registrar.[slug].[property]');
+ return '';
+ }
+
+ }
$ID = $meta->get($relation);
if (!$ID || $ID === '') {
return '';
@@ -79,7 +95,7 @@
return self::resolve($field, $newMeta);
}
- protected static function resolveImage(string $variable, Meta $meta, bool $returnID = false): string
+ protected static function resolveImage(string $variable, ?Meta $meta, bool $returnID = false): string
{
$imgID = $meta->get($variable);
if (!$imgID || $imgID === '') {
@@ -94,7 +110,7 @@
}
return $image[0];
}
- protected static function resolveObject(string $variable, Meta $meta): string
+ protected static function resolveObject(string $variable, ?Meta $meta): string
{
//Hmmm... this should already be handled by dot notation.
return '';
@@ -105,7 +121,7 @@
* We need to map the values to what schema.org expects.
* Most are defined in the JVBase\managers\schema\render namespace.
*/
- public static function resolveForSchema(string $property, string $value, mixed $schema, Meta $meta):mixed
+ public static function resolveForSchema(string $property, string $value, mixed $schema, ?Meta $meta = null):mixed
{
$check = 'resolve'.ucfirst($property).'Property';
if (method_exists(self::class, $check)) {
@@ -122,17 +138,20 @@
return self::resolve($value, $meta);
}
- public static function checkPropertyType(string $property, mixed $value, mixed $schema, Meta $meta):mixed
+ public static function checkPropertyType(string $property, mixed $value, mixed $schema, ?Meta $meta):mixed
{
return match($property) {
'logo', 'image', 'photo', 'primaryImageOfPage', 'thumbnail', 'associatedMedia' => self::resolveImageProperty($property, $value, $schema, $meta),
+ 'creator' => self::resolveCreator($property, $value, $schema, $meta),
default => false
};
-
}
- public static function resolveImageProperty(string $property, mixed $value, mixed $schema, Meta $meta):?ImageObject
+ public static function resolveImageProperty(string $property, mixed $value, mixed $schema, ?Meta $meta):?ImageObject
{
+ if (!$meta) {
+ return null;
+ }
$value = str_replace('{{', '', str_replace('}}', '', $value));
$imgID = $meta->get($value);
error_log('Got image id: '.print_r($imgID, true));
@@ -143,7 +162,10 @@
if (!$img) {
return null;
}
- Cache::for('imageSchemaObject')->flush();
+ if (JVB_TESTING){
+ Cache::for('imageSchemaObject')->flush();
+ }
+
return Cache::for('imageSchemaObject')->connect('post')->remember(
$imgID,
function () use ($imgID, $img) {
@@ -176,4 +198,29 @@
);
}
+
+ public static function resolveCreator(string $type, mixed $value, mixed $schema, ?Meta $meta):mixed
+ {
+ if (is_numeric($value)) {
+ //TODO generate from id
+
+ } else if (str_contains($value, 'CREATOR')) {
+ return JVB()->seo()->getCreator();
+ }
+ return '';
+ }
+
+ public static function resolveRegistrar(string $type, string $property):string
+ {
+ $registrar = Registrar::getInstance($type);
+ if (!$registrar) {
+ return '';
+ }
+ $method = 'get'.ucfirst($property);
+ if (!method_exists($registrar, $method)) {
+ error_log('[Resolver]::resolveRegistrar: Invalid property getter: '.$property);
+ return '';
+ }
+ return $registrar->$method();
+ }
}
--
Gitblit v1.10.0