From 56a9a1ccf764ff7a6af8f8a2292cb07443cb4aa7 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 28 May 2026 18:19:57 +0000
Subject: [PATCH] =New Gitbit setpu

---
 inc/managers/SEO/render/SchemaOutput.php |  176 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 101 insertions(+), 75 deletions(-)

diff --git a/inc/managers/SEO/render/SchemaOutput.php b/inc/managers/SEO/render/SchemaOutput.php
index 909e6bb..31b6859 100644
--- a/inc/managers/SEO/render/SchemaOutput.php
+++ b/inc/managers/SEO/render/SchemaOutput.php
@@ -1,13 +1,11 @@
 <?php
 namespace JVBase\managers\SEO\render;
 
+use JVBase\inc\managers\SEO\render\Thing\Intangible\ItemList\OfferCatalog;
 use JVBase\managers\Cache;
 use JVBase\managers\SEO\BreadcrumbManager;
-use JVBase\managers\SEO\render\Thing\CreativeWork\WebSite;
-use JVBase\managers\SEO\render\Thing\Intangible\OfferCatalog;
 use JVBase\managers\SEO\render\Thing\Intangible\Service;
 use JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\LocalBusiness;
-use JVBase\meta\Meta;
 use JVBase\registrar\config\seo\Resolver;
 use JVBase\registrar\Registrar;
 
@@ -25,8 +23,9 @@
 	{
 		$schema = [];
 
-		$schema[] = $this->buildWebsiteSchema(false);
+		$registrar = false;
 		if (is_front_page()) {
+			$schema[] = $this->buildWebsiteSchema(true);
 			$test = $this->buildOrganizationSchema();
 			if (!empty($test)) {
 				$schema[] = $test;
@@ -35,7 +34,7 @@
 		if (is_singular($this->types)) {
 			$type = get_post_type();
 			$registrar = Registrar::getInstance($type);
-			if ($registrar && !empty($registrar->getConfig('seo')['schema']??[])) {
+			if ($registrar) {
 				$seo = $registrar->getSEO();
 				$schema[] = $seo->schema()->outputSingularSchema();
 			}
@@ -45,7 +44,7 @@
 			$type = $type->name;
 			$registrar = Registrar::getInstance($type);
 
-			if ($registrar && !empty($registrar->getConfig('seo')['schema']??[])) {
+			if ($registrar) {
 				$seo = $registrar->getSEO();
 				$schema[] =$seo->schema()->outputArchiveSchema();
 			}
@@ -53,7 +52,7 @@
 			$type = get_queried_object();
 			$type = jvbNoBase($type->taxonomy);
 			$registrar = Registrar::getInstance($type);
-			if ($registrar && !empty($registrar->getConfig('seo')['schema']??[])) {
+			if ($registrar ) {
 				$seo = $registrar->getSEO();
 				error_log('SEO: '.print_r($seo->schema(), true));
 				$schema[] = $seo->schema()->outputArchiveSchema();
@@ -63,13 +62,20 @@
 			return intval(get_option(BASE.$item.'_archive', false));
 		},Registrar::getFeatured('is_content', 'term'))));
 
-		if (is_page($isContent)){
+		if (!empty($isContent) && is_page($isContent)){
 			$type = get_post_meta(get_the_id(), BASE.'for_type', true);
-			error_log('Type: '.print_r($type, true));
-			$registrar = Registrar::getInstance($type);
-			if ($registrar) {
-				$schema[] = $registrar->getSEO()->schema()->outputContentTaxArchiveSchema();
+//			error_log('Type: '.print_r($type, true));
+			if (!empty($type)) {
+				$registrar = Registrar::getInstance($type);
+				if ($registrar) {
+					$schema[] = $registrar->getSEO()->schema()->outputContentTaxArchiveSchema();
+				}
 			}
+
+		}
+
+		if ($registrar && !empty($registrar->getSEO()->schema()->extra())) {
+			$schema = array_merge($schema, $registrar->getSEO()->schema()->extra());
 		}
 
 
@@ -80,24 +86,28 @@
 		}
 
 		if (!empty($schema)) {
-			$website = JVB()->schemaHelper()::schema('website');
-			if (!empty($website)) {
-				if (JVB_TESTING) {
-					Cache::for('websiteSchema')->flush();
-				}
-				$website = Cache::for('websiteSchema')->remember(
-					'schema',
-					function () {
-						return $this->websiteSchema();
+			if (!is_front_page()) {
+				$website = JVB()->schemaHelper()::schema('website');
+				if (!empty($website)) {
+					if (JVB_TESTING) {
+						Cache::for('websiteSchema')->flush();
 					}
-				);
-				array_unshift($schema, $website);
+					$website = Cache::for('websiteSchema')->remember(
+						'schema',
+						function () {
+							return $this->websiteSchema();
+						}
+					);
+					array_unshift($schema, $website);
+				}
 			}
+
 			$schema = [
 				'@context'		=> 'https://schema.org',
 				'@graph'		=> $schema
 			];
 		}
+
 		return $schema;
 	}
 
@@ -113,8 +123,8 @@
 		if (!$website->getName() || empty($website->getName())){
 			$website->setName(get_bloginfo('name'));
 		}
-		if(!$website->getCreator() || empty($website->getCreator())) {
-			$website->setCreator($this->getCreator());
+		if(!$website->getCreator() || empty($website->getCreator(true))) {
+			$website->setCreator($this->getCreator(true));
 		}
 		return $website->outputSchema();
 	}
@@ -125,9 +135,17 @@
 		if (empty($schema)) {
 			return;
 		}
+//		$encoded =  wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
+//		$encoded =  wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT, 1024);
+		$encoded = wp_json_encode($schema, JSON_UNESCAPED_SLASHES, 512);
+		if ($encoded === false) {
+			error_log('wp_json_encode failed: ' . json_last_error_msg());
+			return;
+		}
 		echo "\n<!-- SEO Schema by JakeVan -->\n";
 		echo '<script type="application/ld+json">' . "\n";
-		echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
+
+		echo $encoded;
 		echo "\n" . '</script>' . "\n";
 		echo "\n" . '<!-- / SEO Schema by JakeVan -->'."\n";
 	}
@@ -185,7 +203,6 @@
 		return Cache::for('websiteSchema')->remember(
 			'full',
 			function () use ($storedWebsite) {
-				error_log('StoredWebsite: '.print_r($storedWebsite, true));
 				$website = JVB()->schemaHelper()::classFromConfig($storedWebsite);
 				if (!$website->getName() || empty($website->getName())) {
 					$website->setName(get_bloginfo('name'));
@@ -217,71 +234,78 @@
 	}
 
 
-	public function getCreator(bool $reference = false):LocalBusiness
+	public function getCreator(bool $reference = false, bool $jakeVan = false):LocalBusiness
 	{
 		if (JVB_TESTING){
 			Cache::for('JakeVanCreator')->flush();
 		}
 
-		if ($reference) {
+		if ($reference && $jakeVan) {
 			return Cache::for('JakeVanCreator')->remember(
 				'reference',
 				function () {
 					$creator = new LocalBusiness();
+					$creator->setId('jakevan');
 					$creator->setName('JakeVan');
-					$creator->setAlternateName('Jake Vanderwerf');
 					$creator->setUrl('https://jakevan.ca/');
 					$creator->setDescription('Let\'s bring your idea to life.');
 					return $creator;
 				}
 			);
 		}
+		if ($jakeVan) {
+			return Cache::for('JakeVanCreator')->remember(
+				'full',
+				function () {
+					$creator = new LocalBusiness();
+					$creator->setName('JakeVan');
+					$creator->setId('https://jakevan.ca/#localbusiness');
+					$creator->setAlternateName(['Jake Vanderwerf', 'Rooted Romantic', 'Jacob Vanderwerf']);
+					$creator->setUrl('https://jakevan.ca');
+					$creator->setSameAs([
+						'https://bsky.app/profile/jakevan.ca',
+					]);
+					$creator->setAreaServed(['Edmonton, Alberta', 'Alberta', 'Canada']);
+					$offers = new OfferCatalog();
+					$offers->setName('Services');
+					$offers->setUrl('https://jakevan.ca/services');
 
-		return Cache::for('JakeVanCreator')->remember(
-			'full',
-			function () {
-				$creator = new LocalBusiness();
-				$creator->setName('JakeVan');
-				$creator->setId('https://jakevan.ca/#localbusiness');
-				$creator->setAlternateName(['Jake Vanderwerf', 'Rooted Romantic', 'Jacob Vanderwerf']);
-				$creator->setUrl('https://jakevan.ca');
-				$creator->setSameAs([
-					'https://bsky.app/profile/jakevan.ca',
-				]);
-				$creator->setAreaServed(['Edmonton, Alberta', 'Alberta', 'Canada']);
-				$offers = new OfferCatalog();
-				$offers->setName('Services');
-				$offers->setUrl('https://jakevan.ca/services');
+					$graphicDesign = new Service();
+					$graphicDesign->setName('Graphic Design');
+					$graphicDesign->setUrl('https://jakevan.ca/services/design/');
+					$graphicDesign->setDescription('From print to digital design.');
+					$websiteDesign = new Service();
+					$websiteDesign->setName('Development');
+					$websiteDesign->setUrl('https://jakevan.ca/services/development/');
+					$websiteDesign->setDescription('From basic websites to custom functionality.');
+					$strategy = new Service();
+					$strategy->setName('Strategy');
+					$strategy->setUrl('https://jakevan.ca/services/strategy/');
+					$strategy->setDescription('From developing your business plan to SEO.');
+					$art = new Service();
+					$art->setName('Art');
+					$art->setUrl('https://jakevan.ca/services/art/');
+					$art->setDescription('From unique, custom, handmade pieces to small-scale wholesale.');
 
-				$graphicDesign = new Service();
-				$graphicDesign->setName('Graphic Design');
-				$graphicDesign->setUrl('https://jakevan.ca/services/design/');
-				$graphicDesign->setDescription('From print to digital design.');
-				$websiteDesign = new Service();
-				$websiteDesign->setName('Development');
-				$websiteDesign->setUrl('https://jakevan.ca/services/development/');
-				$websiteDesign->setDescription('From basic websites to custom functionality.');
-				$strategy = new Service();
-				$strategy->setName('Strategy');
-				$strategy->setUrl('https://jakevan.ca/services/strategy/');
-				$strategy->setDescription('From developing your business plan to SEO.');
-				$art = new Service();
-				$art->setName('Art');
-				$art->setUrl('https://jakevan.ca/services/art/');
-				$art->setDescription('From unique, custom, handmade pieces to small-scale wholesale.');
-
-				$offers->setItemListElement([
-					$graphicDesign,
-					$websiteDesign,
-					$strategy,
-					$art
-				]);
+					$offers->setItemListElement([
+						$graphicDesign,
+						$websiteDesign,
+						$strategy,
+						$art
+					]);
 
 
-				$creator->setHasOfferCatalog($offers);
-				return $creator;
-			}
-		);
+					$creator->setHasOfferCatalog($offers);
+					return $creator;
+				}
+			);
+		}
+		if ($reference) {
+			return $this->getOptionSchemaReference('organization');
+		}
+		$config = JVB()->schemaHelper()::schema('organization');
+
+		return JVB()->schemaHelper()::classFromConfig($config);
 	}
 
 	public function getOptionSchemaReference(string $option):mixed
@@ -294,8 +318,8 @@
 			error_log('Attempted to get schema reference for: '.$option.', but it does not exist');
 			return null;
 		}
-		$action = BASE.ucfirst($option).'Schema';
-		$stored = JVB()->schemaHelper()::reference($action);
+
+		$stored = JVB()->schemaHelper()::reference($option);
 
 		if (empty($stored)){
 			error_log('Attempted to get schema reference for: '.$option.', but defaults not set.');
@@ -308,7 +332,7 @@
 		}
 		$class = new $type();
 		unset($stored['type']);
-		$minimal = apply_filters($action.'Reference', ['name', 'url', 'sameAs', 'logo']);
+		$minimal = apply_filters(BASE.'OrganizationReference', ['name', 'url', 'sameAs', 'logo']);
 
 		foreach ($minimal as $property) {
 			$method = 'set'.ucfirst($property);
@@ -316,6 +340,7 @@
 			if (!$value) {continue;}
 
 			if (str_contains($value, '{{')) {
+				$meta = null;
 				$value = Resolver::resolve($property, $value);
 			}
 			$class->$method($value);
@@ -326,6 +351,7 @@
 	public function buildOrganizationSchema():array
 	{
 		$config = JVB()->schemaHelper()::schema('organization');
+
 		$class = JVB()->schemaHelper()::classFromConfig($config);
 		return ($class)? $class->outputSchema() : [];
 	}

--
Gitblit v1.10.0