| | |
| | | use JVBase\managers\Cache; |
| | | use JVBase\managers\SEO\render\Thing\CreativeWork\MediaObject\ImageObject; |
| | | use JVBase\managers\SEO\render\Thing\Intangible\Quantity\Distance; |
| | | use JVBase\managers\SEO\render\Thing\Intangible\StructuredValue\QuantitativeValue; |
| | | use JVBase\meta\Meta; |
| | | use JVBase\registrar\Registrar; |
| | | |
| | |
| | | class Resolver { |
| | | protected static ?Meta $meta; |
| | | |
| | | public static function resolve(string $template, ?Meta $meta): string |
| | | public static function resolve(string $template, ?Meta $meta): string|array|\JVBase\managers\SEO\render\Thing\Thing |
| | | { |
| | | if (!$meta) { |
| | | if (is_singular()){ |
| | |
| | | } |
| | | } |
| | | self::$meta = $meta; |
| | | |
| | | if (preg_match('/^\{\{([^}]+)}}$/', trim($template), $matches)) { |
| | | return self::resolveVariable($matches[1], $meta); |
| | | } |
| | | |
| | | return preg_replace_callback( |
| | | '/\{\{([^}]+)}}/', |
| | | fn($matches) => self::resolveVariable($matches[1], $meta), |
| | |
| | | protected static function resolveVariable(string $variable, ?Meta $meta = null): mixed |
| | | { |
| | | $variable = trim($variable); |
| | | |
| | | switch ($variable) { |
| | | case 'CREATOR': |
| | | return JVB()->seo()->getCreator(); |
| | | case 'name': |
| | | if (!$meta && is_post_type_archive()) { |
| | | $obj = get_queried_object(); |
| | | |
| | | $registrar = Registrar::getInstance($obj->name); |
| | | return $registrar ? $registrar->getPlural() : $obj->label; |
| | | } |
| | | break; |
| | | } |
| | | if (str_contains($variable, '.')) { |
| | | |
| | | if (str_contains($variable, '.') && $meta) { |
| | | return self::resolveRelation($variable, $meta); |
| | | } |
| | | $function = BASE.'resolve_'.$variable; |
| | | if (function_exists($function)) { |
| | | return $function($variable, $meta); |
| | | } |
| | | if ($meta && $variable === 'post_permalink') { |
| | | return get_the_permalink($meta->id()); |
| | | } |
| | |
| | | if ($variable === 'post_content') { |
| | | return self::resolvePostContent($variable, $meta); |
| | | } |
| | | |
| | | return match($config['type']) { |
| | | 'upload', 'image', 'gallery' => self::resolveImage($variable, $meta), |
| | | 'selector', 'taxonomy', 'user', 'post' => self::resolveObject($variable, $meta), |
| | |
| | | if (!$meta) { |
| | | return''; |
| | | } |
| | | |
| | | $ID = $meta->get($relation); |
| | | if (!$ID || $ID === '') { |
| | | if (empty($ID)) { |
| | | return ''; |
| | | } |
| | | $IDs = explode(',',$ID); |
| | | // 2) Create new Meta for that relation |
| | | $config = $meta->config($relation); |
| | | if (!$config) { |
| | |
| | | error_log('[SEO]Meta Resolver. Could not find type for relation: '.$relation.': '.$field); |
| | | return ''; |
| | | } |
| | | $newMeta = new Meta($ID, $type); |
| | | |
| | | $results = []; |
| | | foreach ($IDs as $ID) { |
| | | $newMeta = new Meta((int)$ID, $type); |
| | | |
| | | // 3) Pass to resolver |
| | | return self::resolve($field, $newMeta); |
| | | $results[] = self::resolveVariable($field, $newMeta); |
| | | } |
| | | return jvbCommaList($results); |
| | | } |
| | | |
| | | protected static function resolvePostContent(string $variable, ?Meta $meta):string{ |
| | |
| | | } |
| | | |
| | | $ignore = ['description', 'name']; |
| | | if (!in_array($property, $ignore)) { |
| | | if (JVB_TESTING && !in_array($property, $ignore)) { |
| | | error_log('[SEO]Resolver - No method found for '.$property.' with value: '.print_r($value, true).'. Defaulting to base Resolver'); |
| | | } |
| | | |
| | |
| | | function () use ($imgID, $img) { |
| | | $imageObject = new ImageObject(); |
| | | $imageObject->setContentUrl($img[0]); |
| | | $width = new Distance(); |
| | | $width->setName($img[1].' px'); |
| | | $width = new QuantitativeValue(); |
| | | $width->setValue($img[1]); |
| | | $width->setUnitText('px'); |
| | | $imageObject->setWidth($width); |
| | | $height = new Distance(); |
| | | $height->setName($img[2].' px'); |
| | | $height = new QuantitativeValue(); |
| | | $height->setValue($img[2]); |
| | | $width->setUnitText('px'); |
| | | $imageObject->setHeight($height); |
| | | |
| | | $image_path = get_attached_file($imgID); |