Jake Vanderwerf
2026-03-03 772462eeca3002a1d52508aeba485aab2b4742ad
inc/managers/SEO/SchemaReferenceBuilder.php
@@ -2,6 +2,7 @@
namespace JVBase\managers\SEO;
use JVBase\meta\Meta;
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
   exit;
@@ -44,8 +45,11 @@
      }
      // Get config for templates and schema type
      $config = self::getConfigFor($objectType, $objectId);
      $schemaConfig = $config['seo']['schema'] ?? [];
      $schemaConfig = [];
      $registrar = Registrar::getInstance($objectType);
      if ($registrar) {
         $schemaConfig  = $registrar->getConfig('seo')['schema']??[];
      }
      // Determine schema type
      if ($schemaType === null) {
@@ -63,9 +67,7 @@
      }
      // Create resolver for template resolution
      $resolver = $objectType === 'post' ? new TemplateResolver($objectId,'post') :
         ($objectType === 'term' ? new TemplateResolver($objectId,'term') :
            ($objectType === 'user' ? new TemplateResolver($objectId, 'user') : null));
      $resolver = new TemplateResolver($objectId, $objectType)??null;
      // Build reference based on schema type
      switch ($schemaType) {
@@ -134,38 +136,6 @@
      };
   }
   /**
    * Get config for an object
    */
   private static function getConfigFor(string $objectType, int $objectId): ?array
   {
      switch ($objectType) {
         case 'post':
            $postType = get_post_type($objectId);
            $typeKey = str_replace(BASE, '', $postType);
            return defined('JVB_CONTENT') && isset(JVB_CONTENT[$typeKey])
               ? JVB_CONTENT[$typeKey]
               : null;
         case 'term':
            $term = get_term($objectId);
            if (!$term || is_wp_error($term)) {
               return null;
            }
            $typeKey = str_replace(BASE, '', $term->taxonomy);
            return defined('JVB_TAXONOMY') && isset(JVB_TAXONOMY[$typeKey])
               ? JVB_TAXONOMY[$typeKey]
               : null;
         case 'user':
            $role = jvbUserRole($objectId);
            return defined('JVB_USER') && isset(JVB_USER[$role])
               ? JVB_USER[$role]
               : null;
      }
      return null;
   }
   /**
    * Build just an @id reference (most minimal)
@@ -402,39 +372,31 @@
    */
   private static function inferSchemaType(string $objectType, int $objectId): string
   {
      $default = 'Thing';
      $registrar = false;
      if ($objectType === 'post') {
         $postType = get_post_type($objectId);
         $typeKey = str_replace(BASE, '', $postType);
         if (defined('JVB_CONTENT') && isset(JVB_CONTENT[$typeKey])) {
            $config = JVB_CONTENT[$typeKey];
            return $config['seo']['schema']['type'] ?? 'CreativeWork';
         }
         return 'CreativeWork';
      }
      if ($objectType === 'term') {
         $registrar = Registrar::getInstance($postType));
         $default = 'CreativeWork';
      } else if ($objectType === 'term') {
         $term = get_term($objectId);
         if (!$term || is_wp_error($term)) {
            return 'DefinedTerm';
         }
         $taxonomyKey = str_replace(BASE, '', $term->taxonomy);
         if (defined('JVB_TAXONOMY') && isset(JVB_TAXONOMY[$taxonomyKey])) {
            $config = JVB_TAXONOMY[$taxonomyKey];
            return $config['seo']['schema']['type'] ?? 'DefinedTerm';
         }
         return 'DefinedTerm';
      }
      if ($objectType === 'user') {
         $registrar = Registrar::getInstance($term->taxonomy));
         $default = 'DefinedTerm';
      } elseif ($objectType === 'user') {
         return 'Person';
      }
      return 'Thing';
      $type = false;
      if ($registrar) {
         $type = $registrar->getConfig('seo')['schema']['type'];
      }
      return ($type && !empty($type)) ? $type : $default;
   }
   /**