twig = new Environment($loader, [ 'cache' => WP_DEBUG ? false : $cacheDir, 'debug' => WP_DEBUG, 'auto_reload' => true, ]); $this->registerWordPressFunctions(); } public static function getInstance(): self { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } public function render(string $template, array $context = []): string { return $this->twig->render($template, $context); } public function display(string $template, array $context = []): void { $this->twig->display($template, $context); } public function getEnvironment(): Environment { return $this->twig; } private function registerWordPressFunctions(): void { $this->twig->addFunction(new TwigFunction('__', function (string $text, string $domain = 'wp-bootstrap'): string { return __($text, $domain); })); $this->twig->addFunction(new TwigFunction('_e', function (string $text, string $domain = 'wp-bootstrap'): void { _e($text, $domain); })); $this->twig->addFunction(new TwigFunction('esc_html', 'esc_html')); $this->twig->addFunction(new TwigFunction('esc_attr', 'esc_attr')); $this->twig->addFunction(new TwigFunction('esc_url', 'esc_url')); } }