| | |
| | | namespace JVBase\managers\SEO; |
| | | |
| | | use JVBase\managers\Cache; |
| | | use JVBase\managers\SEO\schemas\SchemaResolverRegistry; |
| | | use JVBase\meta\Meta; |
| | | use JVBase\managers\SEO\schemas\SchemaDefinition; |
| | | use WP_Term; |
| | |
| | | public function filterTitle(string $title, ?array $args): string |
| | | { |
| | | if ($args !== null) { |
| | | // Not in the loop (admin, etc.) |
| | | return $title; |
| | | } |
| | | |
| | |
| | | |
| | | $metaConfig = $this->config->meta(); |
| | | |
| | | if (empty($metaConfig['title'])) { |
| | | if (empty($metaConfig['metaTitle'])) { |
| | | return $title; |
| | | } |
| | | |
| | | $resolver = $this->getResolver(); |
| | | $customTitle = $resolver->resolve($metaConfig['title']); |
| | | $customTitle = $resolver->resolve($metaConfig['metaTitle']); |
| | | |
| | | return $customTitle ?: $title; |
| | | if (!$customTitle) { |
| | | return $title; |
| | | } |
| | | |
| | | // Strip trailing site name — TSF adds its own branding |
| | | $siteName = get_bloginfo('name'); |
| | | $customTitle = preg_replace('/\s*[|\-–—]\s*' . preg_quote($siteName, '/') . '\s*$/i', '', $customTitle); |
| | | |
| | | return $customTitle; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | $metaConfig = $this->config->meta(); |
| | | |
| | | if (empty($metaConfig['description'])) { |
| | | if (empty($metaConfig['metaDescription'])) { |
| | | return $description; |
| | | } |
| | | |
| | | $resolver = $this->getResolver(); |
| | | $customDescription = $resolver->resolve($metaConfig['description']); |
| | | $customDescription = $resolver->resolve($metaConfig['metaDescription']); |
| | | |
| | | // Truncate to reasonable length |
| | | if (strlen($customDescription) > 160) { |
| | |
| | | $metaConfig = $this->config->meta(); |
| | | |
| | | // Check for custom image |
| | | if (!empty($metaConfig['image'])) { |
| | | if (!empty($metaConfig['socialPreviewImage'])) { |
| | | $resolver = $this->getResolver(); |
| | | $imageUrl = $resolver->resolve($metaConfig['image']); |
| | | $imageUrl = $resolver->resolve($metaConfig['socialPreviewImage']); |
| | | |
| | | if ($imageUrl) { |
| | | $params['og:image'] = $imageUrl; |
| | | |
| | | // Use twitter-specific image if set, otherwise use main image |
| | | if (!empty($metaConfig['twitter_image'])) { |
| | | $twitterImage = $resolver->resolve($metaConfig['twitter_image']); |
| | | if (!empty($metaConfig['twitterImage'])) { |
| | | $twitterImage = $resolver->resolve($metaConfig['twitterImage']); |
| | | $params['twitter:image'] = $twitterImage ?: $imageUrl; |
| | | } else { |
| | | $params['twitter:image'] = $imageUrl; |
| | |
| | | $resolver = $this->getResolver(); |
| | | $metaConfig = $this->config->meta(); |
| | | |
| | | if (!empty($metaConfig['title'])) { |
| | | $webpage['name'] = $resolver->resolve($metaConfig['title']); |
| | | if (!empty($metaConfig['metaTitle'])) { |
| | | $webpage['name'] = $resolver->resolve($metaConfig['metaTitle']); |
| | | } |
| | | |
| | | if (!empty($metaConfig['description'])) { |
| | | $webpage['description'] = $resolver->resolve($metaConfig['description']); |
| | | if (!empty($metaConfig['metaDescription'])) { |
| | | $webpage['description'] = $resolver->resolve($metaConfig['metaDescription']); |
| | | } |
| | | } |
| | | |