Files
wordpress-theme-aksrt/src/WidgetSystem/RendererRegistry.php
T

55 lines
2.5 KiB
PHP

<?php
namespace AKSRT\WidgetSystem;
use AKSRT\WidgetSystem\Renderers\ContentRenderer;
use AKSRT\WidgetSystem\Renderers\GeneralRenderer;
use AKSRT\WidgetSystem\Renderers\KnowledgeProductRenderer;
use AKSRT\WidgetSystem\Renderers\SliderRenderer;
use AKSRT\WidgetSystem\Renderers\UserRenderer;
defined('ABSPATH') || exit;
/**
* One explicit dispatch table for every modern widget renderer.
*/
final class RendererRegistry {
/** @return array<string, class-string> */
public static function all(): array {
return [
'search' => GeneralRenderer::class, 'posts_toc' => GeneralRenderer::class,
'quote' => GeneralRenderer::class, 'icon_cards' => GeneralRenderer::class,
'video' => GeneralRenderer::class, 'embed' => GeneralRenderer::class,
'media_cards' => GeneralRenderer::class, 'icon_cover_cards' => GeneralRenderer::class,
'partners' => GeneralRenderer::class, 'combo_info' => GeneralRenderer::class,
'text_title' => GeneralRenderer::class, 'buttons' => GeneralRenderer::class,
'layout_gap' => GeneralRenderer::class, 'tag_cloud' => GeneralRenderer::class,
'recent_comments' => GeneralRenderer::class, 'links' => GeneralRenderer::class,
'notice' => GeneralRenderer::class,
'term_cards' => ContentRenderer::class, 'term_aggregation' => ContentRenderer::class,
'hot_posts' => ContentRenderer::class, 'post_pay' => ContentRenderer::class,
'posts' => ContentRenderer::class, 'tab_posts' => ContentRenderer::class,
'oneline_posts' => ContentRenderer::class,
'pricing_plans' => KnowledgeProductRenderer::class, 'reviews' => KnowledgeProductRenderer::class,
'faq' => KnowledgeProductRenderer::class, 'stats' => KnowledgeProductRenderer::class,
'highlights' => KnowledgeProductRenderer::class, 'feature_intro' => KnowledgeProductRenderer::class,
'tilt_cases' => KnowledgeProductRenderer::class,
'slider' => SliderRenderer::class, 'slider_media_combo' => SliderRenderer::class,
'user_card' => UserRenderer::class, 'author_card' => UserRenderer::class,
'user_ranking' => UserRenderer::class, 'user_list' => UserRenderer::class,
];
}
public static function render(string $slug, array $instance, array $context = []): string {
$renderer = self::all()[$slug] ?? null;
if ($renderer === null || !is_callable([$renderer, 'render'])) {
return '';
}
return (string) $renderer::render($slug, $instance, $context);
}
public static function supports_items(string $slug): bool {
return in_array($slug, ['posts', 'tab_posts', 'oneline_posts', 'hot_posts'], true);
}
}