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/managers/SEO/SchemaBuilder.php |   64 ++++++++++++++++++++++---------
 1 files changed, 45 insertions(+), 19 deletions(-)

diff --git a/inc/managers/SEO/SchemaBuilder.php b/inc/managers/SEO/SchemaBuilder.php
index 7f8785c..d4a2ee6 100644
--- a/inc/managers/SEO/SchemaBuilder.php
+++ b/inc/managers/SEO/SchemaBuilder.php
@@ -1,6 +1,8 @@
 <?php
 namespace JVBase\managers\SEO;
 
+use JVBase\registrar\Registrar;
+
 if (!defined('ABSPATH')) {
 	exit;
 }
@@ -47,10 +49,10 @@
 	private array $metaFields = ['metaTitle', 'metaDescription', 'socialPreviewImage', 'twitterImage'];
 
 	private array $defaultMetaValues = [
-		'title' => '{{post_title}} | {{site_name}}',
-		'description' => '{{post_excerpt}}',
-		'image' => '{{featured_image}}',
-		'twitter_image' => ''
+		'metaTitle'          => '{{post_title}}',
+		'metaDescription'    => '{{post_excerpt}}',
+		'socialPreviewImage' => '{{featured_image}}',
+		'twitterImage'       => ''
 	];
 
 	public static function getInstance(): self
@@ -124,17 +126,10 @@
 	 */
 	public function getFieldDefinition(string $fieldName): ?array
 	{
-		$definitions = $this->getFieldDefinitions();
+		$definitions = apply_filters(BASE . 'schema_field_definitions', $this->fieldDefinitions);
 		return $definitions[$fieldName] ?? null;
 	}
 
-	/**
-	 * Get all field definitions
-	 */
-	public function getFieldDefinitions(): array
-	{
-		return apply_filters(BASE . 'schema_field_definitions', $this->fieldDefinitions);
-	}
 
 	/**
 	 * Get type definition
@@ -250,9 +245,11 @@
 	{
 		$options = ['' => '-- Select Post Type --'];
 
-		if (defined('JVB_CONTENT')) {
-			foreach (JVB_CONTENT as $key => $config) {
-				$options[jvbCheckBase($key)] = $config['plural'] ?? $config['singular'] ?? ucwords($key);
+		$content = Registrar::getRegistered('post');
+		if (!empty($content)){
+			foreach ($content as $c) {
+				$registrar = Registrar::getInstance($c);
+				$options[jvbCheckBase($c)] = $registrar->getPlural();
 			}
 		}
 
@@ -266,9 +263,12 @@
 	{
 		$options = ['' => '-- Select Taxonomy --'];
 
-		if (defined('JVB_TAXONOMY')) {
-			foreach (JVB_TAXONOMY as $key => $config) {
-				$options[jvbCheckBase($key)] = $config['plural'] ?? $config['singular'] ?? ucwords($key);
+
+		$tax = Registrar::getRegistered('term');
+		if (!empty($tax)){
+			foreach ($tax as $c) {
+				$registrar = Registrar::getInstance($c);
+				$options[jvbCheckBase($c)] = $registrar->getPlural();
 			}
 		}
 
@@ -407,7 +407,7 @@
 		 **************************************************************/
 		$this->field('about')
 			->type('reference')
-			->label('About (Service/Topic)')
+			->label('About')
 			->transformer('reference');
 
 		$this->field('temporalCoverage')
@@ -1494,6 +1494,32 @@
 				'answer'
 			]);
 
+		$this->type('Place')
+			->label('Place')
+			->group('general')
+			->fields([
+				'type',
+				'name',
+				'description',
+				'url',
+				'image',
+				'geo',
+				'address',
+				'sameAs',
+			]);
+
+		$this->type('City')
+			->label('City')
+			->group('general')
+			->extends('Place')
+			->addFields([
+				'containedInPlace',
+			]);
+		$this->field('containedInPlace')
+			->type('reference')
+			->label('Contained In')
+			->description('Parent place (province, country)')
+			->transformer('reference');
 		/**************************************************************
 		 * ORGANIZATION & BUSINESS
 		 **************************************************************/

--
Gitblit v1.10.0