Each template has a pre-defined set of variables passed to it by core. You can also pass your own custom params (variables or functions) to templates by using the template-args filter:
Pass additional data to all templates
For example to pass a “user_is_logged_in” variable to all templates in your theme:
//In functions.js or any custom js module.
//Here we assume that the authentication module (Auth) is included.
App.filter( 'template-args', function( template_args ) {
template_args.user_is_logged_in = Auth.userIsLoggedIn();
return template_args;
} );
Then you can test if a user is logged in in your templates using the “user_is_logged_in” variable:
//For example in single.html template:
<h1>My post title</h1>
<% if ( user_is_logged_in ){ %>
<%= post.content %>
<% } else { %>
<p>Please log in to view post content</p>
<% } %>
Pass additional data to a chosen template
To pass custom data stored in local storage (under the “my-data” key, using the PersistentStorage module) to the “my-custom-template.html” template:
App.filter( 'template-args', function( template_args, view_type, view_template ) {
//Here we assume that the PersistentStorage module is included.
if ( view_template === 'my-custom-template') { //Don't need .html here
template_args.my_custom_data = PersistentStorage.get( 'my-data' );
}
return template_args;
} );
Then to use our custom data in “my-custom-template.html” template:
My first key value: <%= my_custom_data.first_key %>
Pass functions to templates
To pass a date formatting function to single, page and archive templates:
//In functions.js
//Define our date formatting function:
//(Here we suppose that the Moment.js lib has been included)
function format_date_using_moment_js( post_date ) {
var gmt_offset = Config.gmt_offset * 3600;
var moment_post_date = Moment( new Date( ( post_date - gmt_offset ) * 1000 ) );
return moment_post_date.format( 'MMMM Do YYYY' );
}
//Then pass this function to single, page and archive templates using the "template-args" filter:
App.filter( 'template-args', function( template_args, view_type, view_template ) {
if (view_type === 'single' || view_type === 'page' || view_type === 'archive') {
template_args.format_date = format_date_using_moment_js;
}
return template_args;
} );
Then use our format_date function in templates:
<div class="post-meta">
By <span class="post-author"><%= post.author %></span><span class="post-publish-date"><%= format_date( post.date ) %></span>
</div>
To Know More
More on “template-args” filter here.
General notions about templates can be found in the “Template Files” section of the doc.
Also see the tutorial about customizing templates.