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)