Twig API

This is a technical summary of what is offered by the Twig API.

  1. Overview
  2. Custom Filters
  3. Custom Functions
  4. Custom Extensions
  5. Change the Cache Directory
  6. Twig Integration is Enabled
  7. Changing the Default Autoescaper
  8. Programmatic API

Overview

The API is heavily based on Timber, and extending Twig via our system can be a breeze. Let's take a look at how to get started.

Custom Filters

Use cs_twig_filters to add a new filter. Each key of this array is the filter name. Set your key value as an array using callable as the function for the filter.

// Add a filter to tap into all filters add_filter('cs_twig_filters', function($results) { // Add a filter to be used as my_filter $results['my_filter'] = [ 'callable' => function($value, $arg1) { // Using an argument passed in a filter if (!empty($arg1)) { return $value . ' arg1 was added'; } return $value . ' arg1 was not added or is empty'; } ]; return $results; });

Then in the App we would utilize this through the following.

{{ post.title | my_filter(true) }}

Custom Functions

Use cs_twig_functions to add a new function. Each key of this array is the function name. Set your key value as an array using callable as the function for the filter.

// Add a filter to tap into all filters add_filter('cs_twig_functions', function($results) { // Add a function to be used as phpinfo $results['phpinfo'] = [ 'callable' => function($value, $arg1) { phpinfo(); // If your function would return a value this is where you would place it return ''; } ]; return $results; });

Then in the App.

{{ phpinfo() }}

Custom Extensions

Use the action cs_twig_boot to tap into the Twig Environment. You can do much more then place a new extension here as well. The following is a sample from the Debug extension.

<?php use Twig\Extension\DebugExtension; add_action('cs_twig_boot', function($twig) { $twig->addExtension(new DebugExtension()); });

Change the Cache Directory

Use the filter cs_twig_cache_directory to change the cache directory. The default is get_temp_dir() . 'cornerstone/twig/'.

add_filter('cs_twig_cache_directory', function() { return '/home/user/cache_directory/twig/'; });

Twig Integration is Enabled

// Must boot after theme options add_action('after_setup_theme', function() { // Twig not enabled if (!cs_stack_get_value('cs_twig_enabled')) { return; } // Your extension // ... }, 999);

Changing the Default Autoescaper

When the autoescaper is enabled, it defaults to html as the escaper. This can be changed through the following filter.

add_filter('cs_twig_autoescape_strategy', function() { return 'esc_js'; });

Programmatic API

<?php /** * Templates grabber from both theme options and directory templates * * @return array */ function cs_twig_templates() { } /** * Get directories to search for templates in twig * Uses filter 'cs_twig_directory_templates' * * @return array */ function cs_twig_directory_templates() { } /** * Twig cache directory * uses filter 'cs_twig_cache_directory' * Defaults to WordPress temp directory + cornerstone/twig * * @return string */ function cs_twig_cache_directory() { } /** * Render a twig string * * @param string * * @return string */ function cs_twig_render($str) { } /** * Get twig instance environment * * @return Twig\Environment */ function cs_twig_environment() { }

See something inaccurate? Let us know