# elementor/3.31.2/modules/atomic-widgets/template-renderer/template-renderer.php

Elementor Website Builder – more than just a page builder, version 3.31.2. 63 lines.

- Page: https://pluginprobe.com/plugins/elementor/3.31.2/code/modules/atomic-widgets/template-renderer/template-renderer.php
- Raw: https://pluginprobe.com/plugins/elementor/3.31.2/raw/modules/atomic-widgets/template-renderer/template-renderer.php
- Modified: 2025-03-17T13:28:54+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elementor/3.31.2/code/modules/atomic-widgets/template-renderer/template-renderer.php#L10-L20`.

```php
<?php

namespace Elementor\Modules\AtomicWidgets\TemplateRenderer;

use Elementor\Utils;
use ElementorDeps\Twig\Environment;
use ElementorDeps\Twig\Runtime\EscaperRuntime;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

class Template_Renderer {
	private static ?self $instance = null;

	private Single_File_Loader $loader;

	private Environment $env;

	private function __construct() {
		$this->loader = new Single_File_Loader();

		$this->env = new Environment(
			$this->loader,
			[
				'debug' => Utils::is_elementor_debug(),
				'autoescape' => 'name',
			]
		);

		$escaper = $this->env->getRuntime( EscaperRuntime::class );

		$escaper->setEscaper( 'full_url', 'esc_url' );
		$escaper->setEscaper( 'html_tag', [ Utils::class, 'validate_html_tag' ] );
	}

	public static function instance(): self {
		if ( null === self::$instance ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	public static function reset() {
		self::$instance = null;
	}

	public function is_registered( string $name ): bool {
		return $this->loader->is_registered( $name );
	}

	public function register( string $name, string $path ): self {
		$this->loader->register( $name, $path );

		return $this;
	}

	public function render( string $name, array $context = [] ): string {
		return $this->env->render( $name, $context );
	}
}

```
