kaiseki / wp-template-renderer
Render WordPress template parts by slug or from a class, with a configurable class-to-slug generator
Package info
github.com/kaisekidev/kaiseki-wp-template-renderer
pkg:composer/kaiseki/wp-template-renderer
Requires
- php: ^8.2
- jawira/case-converter: ^3.5
- kaiseki/config: ^2.0
- kaiseki/wp-hook: ^2.0
- psr/container: ^1.1 || ^2.0
Requires (Dev)
- bnf/phpstan-psr-container: ^1.1
- kaiseki/php-coding-standard: ^1.0
- maglnet/composer-require-checker: ^4.0
- php-stubs/wordpress-stubs: ^6.2
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^11.0
- roave/security-advisories: dev-latest
- szepeviktor/phpstan-wordpress: ^2.0
This package is auto-updated.
Last update: 2026-06-03 12:19:28 UTC
README
Render WordPress template parts by slug or from a class, with a configurable class-to-slug generator.
Two renderers, both wired through ConfigProvider:
TemplateRenderer— renders a template part by slug from a configurable base directory under the active theme (defaulttemplate-parts), capturing its output as a string.ClassTemplateRenderer— renders a template part that lives next to a given object's class file, deriving the slug from the class short name (kebab-cased by default) via aClassSlugGeneratorInterface.
Installation
composer require kaiseki/wp-template-renderer
Requires PHP 8.2 or newer.
Usage
Register ConfigProvider with your laminas-style config aggregator. It declares the renderer factories
and aliases ClassSlugGeneratorInterface to the kebab-case ClassTemplateSlugGenerator, and exposes a
template_renderer config key for the defaults:
use Kaiseki\WordPress\TemplateRenderer\ConfigProvider; return (new ConfigProvider())(); // [ // 'template_renderer' => [ // 'template_renderer' => ['template_directory' => 'template-parts'], // 'class_template_renderer' => ['template_name' => 'template'], // ], // 'dependencies' => [ /* aliases + factories */ ], // 'hook' => ['provider' => []], // ]
Rendering a template part by slug
use Kaiseki\WordPress\TemplateRenderer\TemplateRenderer; /** @var TemplateRenderer $renderer */ $renderer = $container->get(TemplateRenderer::class); // Renders <stylesheet>/template-parts/card.php and returns its output. $html = $renderer->render('card', ['title' => 'Hello']); // With a name variant: <stylesheet>/template-parts/card-featured.php $html = $renderer->render('card', ['title' => 'Hello'], 'featured');
The base directory is configurable via template_renderer.template_renderer.template_directory.
Rendering a template part from a class
use Kaiseki\WordPress\TemplateRenderer\ClassTemplateRenderer; /** @var ClassTemplateRenderer $renderer */ $renderer = $container->get(ClassTemplateRenderer::class); // For an instance of App\Blocks\HeroBlock, looks for hero-block-template.php // next to HeroBlock's class file and returns its output. $html = $renderer->render($block, ['heading' => 'Welcome']); // Override the derived slug and/or the template name suffix: $html = $renderer->render($block, ['heading' => 'Welcome'], slug: 'hero', templateName: '');
The slug is produced by the ClassSlugGeneratorInterface binding (kebab-cased class short name by
default); the template-name suffix defaults to
template_renderer.class_template_renderer.template_name.
Both renderers throw a RuntimeException when the resolved template file does not exist.
Development
composer install
composer check # check-deps, cs-check, phpstan
License
MIT — see LICENSE.