Tribe__Template::template( string|array $name, array $context = array(), boolean $echo = true )
A very simple method to include a Template, allowing filtering and additions using hooks.
Contents
Parameters
- $name
-
(string|array) (Required) Which file we are talking about including. If an array, each item will add a directory separator to get to the single template.
- $context
-
(array) (Optional) Any context data you need to expose to this file
Default value: array()
- $echo
-
(boolean) (Optional) If we should also print the Template
Default value: true
Return
(string|false) Either the final content HTML or false if no template could be found.
Source
File: src/Tribe/Template.php
public function template( $name, $context = array(), $echo = true ) {
// If name is String make it an Array
if ( is_string( $name ) ) {
$name = (array) explode( '/', $name );
}
// Clean this Variable
$name = array_map( 'sanitize_title_with_dashes', $name );
if ( ! empty( $this->origin->template_namespace ) ) {
$namespace = array_merge( (array) $this->origin->template_namespace, $name );
} else {
$namespace = $name;
}
// Setup the Hook name
$hook_name = implode( '/', $namespace );
// Check if the file exists
$file = $this->get_template_file( $name );
// Check if it's a valid variable
if ( ! $file ) {
return false;
}
// Before we load the file we check if it exists
if ( ! file_exists( $file ) ) {
return false;
}
ob_start();
// Merges the local data passed to template to the global scope
$this->merge_context( $context, $file, $name );
/**
* Fires an Action before including the template file
*
* @since 4.6.2
* @since 4.7.20 The $name param no longers contains the extension
*
* @param string $file Complete path to include the PHP File
* @param array $name Template name
* @param self $template Current instance of the Tribe__Template
*/
do_action( 'tribe_template_before_include', $file, $name, $this );
/**
* Fires an Action for a given template name before including the template file
*
* E.g.:
* `tribe_template_before_include:events/blocks/parts/details`
* `tribe_template_before_include:events/embed`
* `tribe_template_before_include:tickets/login-to-purchase`
*
* @since 4.7.20
*
* @param string $file Complete path to include the PHP File
* @param array $name Template name
* @param self $template Current instance of the Tribe__Template
*/
do_action( "tribe_template_before_include:$hook_name", $file, $name, $this );
// Only do this if really needed (by default it wont)
if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
// We don't allow Extrating of a variable called $name
if ( isset( $this->context['name'] ) ) {
unset( $this->context['name'] );
}
// We don't allow Extrating of a variable called $file
if ( isset( $this->context['file'] ) ) {
unset( $this->context['file'] );
}
// Make any provided variables available in the template variable scope
extract( $this->context ); // @codingStandardsIgnoreLine
}
include $file;
/**
* Fires an Action after including the template file
*
* @since 4.6.2
* @since 4.7.20 The $name param no longers contains the extension
*
* @param string $file Complete path to include the PHP File
* @param array $name Template name
* @param self $template Current instance of the Tribe__Template
*/
do_action( 'tribe_template_after_include', $file, $name, $this );
/**
* Fires an Action for a given template name after including the template file
*
* E.g.:
* `tribe_template_after_include:events/blocks/parts/details`
* `tribe_template_after_include:events/embed`
* `tribe_template_after_include:tickets/login-to-purchase`
*
* @since 4.7.20
*
* @param string $file Complete path to include the PHP File
* @param array $name Template name
* @param self $template Current instance of the Tribe__Template
*/
do_action( "tribe_template_after_include:$hook_name", $file, $name, $this );
// Only fetch the contents after the action
$html = ob_get_clean();
/**
* Allow users to filter the final HTML
*
* @since 4.6.2
* @since 4.7.20 The $name param no longers contains the extension
*
* @param string $html The final HTML
* @param string $file Complete path to include the PHP File
* @param array $name Template name
* @param self $template Current instance of the Tribe__Template
*/
$html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
/**
* Allow users to filter the final HTML by the name
*
* E.g.:
* `tribe_template_html:events/blocks/parts/details`
* `tribe_template_html:events/embed`
* `tribe_template_html:tickets/login-to-purchase`
*
* @since 4.7.20
*
* @param string $html The final HTML
* @param string $file Complete path to include the PHP File
* @param array $name Template name
* @param self $template Current instance of the Tribe__Template
*/
$html = apply_filters( "tribe_template_html:$hook_name", $html, $file, $name, $this );
if ( $echo ) {
echo $html;
}
return $html;
}
Changelog
| Version | Description |
|---|---|
| 4.6.2 | Introduced. |