| | |
| | | <?php |
| | | namespace JVBase\managers\SEO; |
| | | |
| | | use JVBase\meta\MetaManager; |
| | | use JVBase\meta\Meta; |
| | | use JVBase\registrar\Registrar; |
| | | use WP_Post; |
| | | use WP_Term; |
| | | use WP_User; |
| | |
| | | private ?int $objectId = null; |
| | | private ?string $objectType = null; |
| | | private ?string $contentType = null; |
| | | private ?MetaManager $meta = null; |
| | | private ?Meta $meta = null; |
| | | private array $context = []; |
| | | private array $fieldDefinitions = []; |
| | | |
| | |
| | | $this->contentType = $contentType; |
| | | |
| | | if ($objectId && $objectType) { |
| | | $this->meta = new MetaManager($objectId, $objectType, $contentType); |
| | | $this->meta = new Meta($objectId, $objectType, $contentType); |
| | | $this->loadFieldDefinitions(); |
| | | } |
| | | |
| | |
| | | return $special; |
| | | } |
| | | |
| | | // Try to get from MetaManager |
| | | // Try to get from Meta.php |
| | | if ($this->meta) { |
| | | $value = $this->meta->getValue($variable); |
| | | $value = $this->meta->get($variable); |
| | | |
| | | // Auto-resolve complex field types via SchemaFieldHelpers |
| | | $value = $this->autoResolveField($variable, $value); |
| | |
| | | */ |
| | | private function isRelatedPostsField(string $fieldName): bool |
| | | { |
| | | if (!defined('JVB_CONTENT')) { |
| | | $posts = Registrar::getRegistered('post'); |
| | | if (empty($posts)) { |
| | | return false; |
| | | } |
| | | |
| | | // Check if field name matches any plural content type |
| | | foreach (JVB_CONTENT as $type => $config) { |
| | | $plural = strtolower($config['plural'] ?? ''); |
| | | if ($plural && $fieldName === $plural) { |
| | | foreach ($posts as $post) { |
| | | $registrar = Registrar::getInstance($post); |
| | | if ($registrar && strtolower($registrar->getPlural()) === $fieldName){ |
| | | return true; |
| | | } |
| | | } |
| | |
| | | */ |
| | | private function isRelatedTermsField(string $fieldName): bool |
| | | { |
| | | if (!defined('JVB_TAXONOMY')) { |
| | | |
| | | $posts = Registrar::getRegistered('term'); |
| | | if (empty($posts)) { |
| | | return false; |
| | | } |
| | | |
| | | // Check if field name matches any plural taxonomy |
| | | foreach (JVB_TAXONOMY as $taxonomy => $config) { |
| | | $plural = strtolower($config['plural'] ?? ''); |
| | | if ($plural && $fieldName === $plural) { |
| | | foreach ($posts as $post) { |
| | | $registrar = Registrar::getInstance($post); |
| | | if ($registrar && strtolower($registrar->getPlural()) === $fieldName){ |
| | | return true; |
| | | } |
| | | } |
| | |
| | | */ |
| | | private function getPostTypeFromPluralName(string $pluralName): ?string |
| | | { |
| | | if (!defined('JVB_CONTENT')) { |
| | | |
| | | $posts = Registrar::getRegistered('post'); |
| | | if (empty($posts)) { |
| | | return null; |
| | | } |
| | | |
| | | foreach (JVB_CONTENT as $type => $config) { |
| | | $plural = strtolower($config['plural'] ?? ''); |
| | | if ($plural === $pluralName) { |
| | | return $type; |
| | | foreach ($posts as $post) { |
| | | $registrar = Registrar::getInstance($post); |
| | | if ($registrar && strtolower($registrar->getPlural()) === $pluralName){ |
| | | return $post; |
| | | } |
| | | } |
| | | |
| | | |
| | | return null; |
| | | } |
| | | |
| | |
| | | */ |
| | | private function getTaxonomyFromPluralName(string $pluralName): ?string |
| | | { |
| | | if (!defined('JVB_TAXONOMY')) { |
| | | |
| | | $posts = Registrar::getRegistered('term'); |
| | | if (empty($posts)) { |
| | | return null; |
| | | } |
| | | |
| | | foreach (JVB_TAXONOMY as $taxonomy => $config) { |
| | | $plural = strtolower($config['plural'] ?? ''); |
| | | if ($plural === $pluralName) { |
| | | return $taxonomy; |
| | | foreach ($posts as $post) { |
| | | $registrar = Registrar::getInstance($post); |
| | | if ($registrar && strtolower($registrar->getPlural()) === $pluralName){ |
| | | return $post; |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | |
| | | // Check field definitions for taxonomy or post relations |
| | | if (isset($this->fieldDefinitions[$relation])) { |
| | | $fieldDef = $this->fieldDefinitions[$relation]; |
| | | $value = $this->meta->getValue($relation); |
| | | $value = $this->meta->get($relation); |
| | | |
| | | if (!$value) { |
| | | return null; |
| | |
| | | // Image URL accessors for different sizes |
| | | if (str_ends_with($variable, '_image_url')) { |
| | | $field = str_replace('_image_url', '', $variable); |
| | | $imageId = $this->meta?->getValue($field); |
| | | $imageId = $this->meta?->get($field); |
| | | if ($imageId) { |
| | | return wp_get_attachment_image_url($imageId, 'full') ?: ''; |
| | | } |
| | |
| | | */ |
| | | private function resolveLocationComponent(string $component): string |
| | | { |
| | | $location = $this->meta?->getValue('location'); |
| | | $location = $this->meta?->get('location'); |
| | | |
| | | if (!is_array($location)) { |
| | | return ''; |
| | |
| | | return; |
| | | } |
| | | |
| | | $typeKey = str_replace(BASE, '', $this->contentType); |
| | | |
| | | if ($this->objectType === 'post' && defined('JVB_CONTENT')) { |
| | | $this->fieldDefinitions = JVB_CONTENT[$typeKey]['fields'] ?? []; |
| | | } elseif ($this->objectType === 'term' && defined('JVB_TAXONOMY')) { |
| | | $this->fieldDefinitions = JVB_TAXONOMY[$typeKey]['fields'] ?? []; |
| | | } elseif ($this->objectType === 'user' && defined('JVB_USER')) { |
| | | $this->fieldDefinitions = JVB_USER[$typeKey]['fields'] ?? []; |
| | | $registrar = Registrar::getInstance($this->contentType)); |
| | | if ($registrar) { |
| | | $this->fieldDefinitions = $registrar->getFields(); |
| | | } |
| | | } |
| | | } |