WordPress Handlebars Engine
, (*1)
Renders Handlebars/Moustache templates within your WordPress Theme/Plugin. Handlebars rendering is powered by LightnCandy. Tested with WordPress 5.2.3, (*2)
Installation
You can install this (must-use) plugin two ways, (*3)
Via Composer
If you load your dependenies via Composer you can load this plugin with, (*4)
$ php composer require iantsch/wp-hbs-engine
Via Download
Download/fork this repository and copy the plugin-folder into wp-content/plugins/
.
If you visit your Plugin section in the wp-admin
area, activate it and you are good to go., (*5)
Troubleshoots
You need to load the zordius/lightncandy
dependency via composer. Install composer and run $ composer install
in the wp-content/plugins/wp-hbs-engine
folder., (*6)
The plugin needs a folder with write permissions for caching the handlebar files. It tries to create the folder wp-content/plugins/wp-hbs-engine/cache
., (*7)
The plugin will try to load partials from the default folder src/templates/partials
within your current theme. If the folder does not exist please add it (or use the filter hook to adapt)., (*8)
Usage
Setup and modify the render engine to your needs in your functions.php
or your plugin, (*9)
add_filter('MBT/Engine/Handlebars/Helpers', function($helpers) {
$helpers['__'] = function($string) {
return __($string, 'mbt');
};
$helpers['permalink'] = 'get_permalink';
$helpers['content'] = function() {
return apply_filters('the_content', get_the_content());
};
return $helpers;
});
In your theme call it like a WordPress function., (*10)
global $post;
while (have_posts()){
the_post();
$data = (array) $post;
the_hbs_template('article', $data);
}
In your article.hbs
it is handlebarsjs.com syntax, (*11)
<h2>{{this.post_title}}</h2>
<div>{{{content}}}</div>
<a href="{{permalink}}">{{__ 'Click'}}</a>
API
get_hbs_template
| Parameter | Type | Description |
|---|---|---|
| $template
| string | template name |
| $data
| string | associative array with all the needed data for the template |
| $templateDir
| string | boolean | absolutee path to template entry directory, defaults to /src/templates/
in current theme |
| $cacheDir
| string | boolean | absolute path to caching directory, defaults to /cache/
in plugins folder |
Returns: $html
- the rendered HTML output, (*12)
the_hbs_template
| Parameter | Type | Description |
|---|---|---|
| $template
| string | template name |
| $data
| string | associative array with all the needed data for the template |
| $templateDir
| string | boolean | absolutee path to template entry directory, defaults to /src/templates/
in current theme |
| $cacheDir
| string | boolean | absolute path to caching directory, defaults to /cache/
in plugins folder |
echoes the rendered HTML output, (*13)
Hooks
There are several hooks to modify and adapt the render engine, (*14)
Filters
MBT/Engine/Handlebars/Extension
| Parameter | Type | Description |
|---|---|---|
| $extension
| string | file extension, default: hbs
|
Returns: $extension
- file extension of your handlebar templates, (*15)
MBT/Engine/Handlebars/Helpers
| Parameter | Type | Description |
|---|---|---|
| $helpers
| array | associative array with callback functions for the implemented helpers |
| $this
| object | Current instance of Handlebars engine |
Returns: $helpers
- array of handlebars helper, (*16)
MBT/Engine/Handlebars/Flags
| Parameter | Type | Description |
|---|---|---|
| $flags
| int | bitwise flags used by LightnCandy |
| $this
| object | Current instance of Handlebars engine |
Returns: $flags
- LightnCandy Flags, (*17)
MBT/Engine/Handlebars/Partials
| Parameter | Type | Description |
|---|---|---|
| $partials
| array | associative array with the relative path to the partials |
| $this
| object | Current instance of Handlebars engine |
Returns: $partials
- array of available partials, (*18)
MBT/Engine/Handlebars/DefaultData
| Parameter | Type | Description |
|---|---|---|
| $defaultData
| array | fallback data for the template |
| $template
| string | template name |
Returns: $defaultData
- fallback data for the template, (*19)
MBT/Engine/Handlebars/Data
| Parameter | Type | Description |
|---|---|---|
| $data
| array | associative array with all the needed data for the template |
| $template
| string | template name |
Returns: $data
- the data for the template, (*20)
MBT/Engine/Handlebars/Html
| Parameter | Type | Description |
|---|---|---|
| $html
| string | rendered HTML output (with data) |
| $template
| string | template name |
| $data
| array | data used to render output |
Returns: $html
- the rendered HTML output, (*21)
Actions
MBT/Engine/Handlebars/Init
Parameter |
Type |
Description |
$this |
object |
Current instance of Handlebars engine |
Credits
@iantsch - web developer behind this and other projects., (*22)