60, 'alts' => [] ]; protected string $description; protected array $descriptionConfig = [ 'maxLength' => 120, 'alts' => [] ]; protected int $image; protected int $twitterImage; public function __construct(string $slug) { $this->slug = $slug; $this->titleConfig['alts'] = apply_filters(BASE.jvbNoBase($slug).'TitleAlts', []); add_action('init', [$this, 'init']); } public function init():void { if (!function_exists('tsf')){ return; } if ($this->hasTitle()){ add_filter('the_seo_framework_title_from_generation', [$this, 'filterTitle'], 10, 2); } if ($this->hasDescription()){ add_filter('the_seo_framework_generated_description', [$this, 'filterDescription'], 10, 3); } if ($this->hasImage()){ add_filter('the_seo_framework_image_generation_params', [$this, 'filterImage'], 10, 3); } } public function setAlts(array $alts, string $type = 'title'):void { foreach (array_values($alts) as $i => $alt) { if (!is_string($alt)) { error_log('[Registrar.config.Meta]:setAlts invalid string attempted: '.print_r($alt, true)); unset($alts[$i]); } } switch ($type) { case 'title': $this->titleConfig['alts'] = $alts; break; case 'description': $this->descriptionConfig['alts'] = $alts; break; default: error_log('[Registrar.config.Meta]:setAlts invalid type attempted: '.print_r($type, true)); } } public function hasTitle():bool { return !empty($this->title); } public function hasDescription():bool { return !empty($this->description); } public function hasImage():bool { return !empty($this->image); } public function hasTwitterImage():bool { return !empty($this->twitterImage); } public function testLength(int $ID, string $result, string $type):string { $maxLength = match($type) { 'title' => $this->titleConfig['maxLength'], 'description' => $this->descriptionConfig['alts'], default => false }; if (!$maxLength) { error_log('[Registrar.config.Meta]:testLength invalid type: '.$type); return $result; } $alts = match($type) { 'title' => $this->titleConfig['alts'], 'description' => $this->descriptionConfig['alts'], }; usort($alts, fn($a, $b) => mb_strlen($b) <=> mb_strlen($a)); $meta = new \JVBase\meta\Meta($ID, Registrar::getInstance($this->slug)->getType()); foreach ($alts as $alt) { $alt = Resolver::resolve($alt, $meta); $r = $result.' '.trim($alt); if (mb_strlen($r) <= $maxLength) { return $r; } } return rtrim($result, $maxLength - 3).'...'; } public function filterTitle(string $title, ?array $args): string { error_log('Filtering title...'); if (jvbTSFDoIt($this->slug, $args)){ return $title; } $ID = jvbTSFGetID($args); $meta = new \JVBase\meta\Meta($ID, Registrar::getInstance($this->slug)->getType()); $resolved = Resolver::resolve($this->title, $meta); $resolved = $this->testLength($ID, $resolved, 'title'); return $resolved; } public function filterDescription(string $description, ?array $args): string { if (jvbTSFDoIt($this->slug, $args)){ return $description; } $ID = jvbTSFGetID($args); $meta = new \JVBase\meta\Meta($ID, Registrar::getInstance($this->slug)->getType()); return Resolver::resolve($this->title, $meta); } public function filterImage(string $image, ?array $args): string { if (jvbTSFDoIt($this->slug, $args)){ return $image; } $ID = jvbTSFGetID($args); $meta = new \JVBase\meta\Meta($ID, Registrar::getInstance($this->slug)->getType()); return Resolver::resolve($this->title, $meta); } }