| | |
| | | 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(); |
| | |
| | | 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()); |
| | | } |
| | |
| | | $relation = array_shift($parts); |
| | | $field = implode('.', $parts); |
| | | |
| | | |
| | | //We need to: |
| | | // 1) Get the id of the item we're fetching (meta value of the $relation) |
| | | if ($relation === 'registrar') { |
| | |
| | | if (!$meta) { |
| | | return''; |
| | | } |
| | | |
| | | $ID = $meta->get($relation); |
| | | if (empty($ID)) { |
| | | return ''; |
| | |
| | | |
| | | $ignore = ['description', 'name']; |
| | | 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'); |
| | | // error_log('[SEO]Resolver - No method found for '.$property.' with value: '.print_r($value, true).'. Defaulting to base Resolver'); |
| | | } |
| | | |
| | | |
| | |
| | | if (!$imgID || $imgID === '') { |
| | | return null; |
| | | } |
| | | |
| | | return self::imgIDToSchema($imgID); |
| | | |
| | | } |
| | | public static function imgIDToSchema(int $imgID):ImageObject|null |
| | | { |
| | | $img = wp_get_attachment_image_src($imgID,'full'); |
| | | if (!$img) { |
| | | return null; |
| | |
| | | $imageObject = new ImageObject(); |
| | | $imageObject->setContentUrl($img[0]); |
| | | $width = new QuantitativeValue(); |
| | | $width->showID(false); |
| | | $width->setValue($img[1]); |
| | | $width->setUnitText('px'); |
| | | $imageObject->setWidth($width); |
| | | $height = new QuantitativeValue(); |
| | | $height->showID(false); |
| | | $height->setValue($img[2]); |
| | | $width->setUnitText('px'); |
| | | $height->setUnitText('px'); |
| | | $imageObject->setHeight($height); |
| | | |
| | | $image_path = get_attached_file($imgID); |
| | |
| | | return $imageObject; |
| | | } |
| | | ); |
| | | |
| | | } |
| | | |
| | | public static function resolveCreator(string $type, mixed $value, mixed $schema, ?Meta $meta):mixed |