| | |
| | | namespace JVBase\managers\SEO; |
| | | |
| | | use JVBase\meta\Meta; |
| | | use JVBase\registrar\Registrar; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | | exit; |
| | |
| | | } |
| | | |
| | | // 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) { |
| | |
| | | } |
| | | |
| | | // 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) { |
| | |
| | | }; |
| | | } |
| | | |
| | | /** |
| | | * 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) |
| | |
| | | */ |
| | | 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; |
| | | } |
| | | |
| | | /** |