Created
January 26, 2020 22:25
-
-
Save ccurtin/d04d622e2fb0c9cf93a4e25aba85f9bc to your computer and use it in GitHub Desktop.
Same as include_template_part, require, include, but allows for arguments to be passed into template file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Like get_template_part() put lets you pass args to the template file | |
* Args are available in the tempalte as $template_args array | |
* @param string filepart | |
* @param mixed wp_args style argument list | |
* @example hm_get_template_part( 'template_path', [ 'option' => 'value' ] ); ---> then in template: $template_args['option']; | |
*/ | |
function hm_get_template_part( $file, $template_args = array(), $cache_args = array() ) { | |
$template_args = wp_parse_args( $template_args ); | |
$cache_args = wp_parse_args( $cache_args ); | |
if ( $cache_args ) { | |
foreach ( $template_args as $key => $value ) { | |
if ( is_scalar( $value ) || is_array( $value ) ) { | |
$cache_args[$key] = $value; | |
} else if ( is_object( $value ) && method_exists( $value, 'get_id' ) ) { | |
$cache_args[$key] = call_user_method( 'get_id', $value ); | |
} | |
} | |
if ( ( $cache = wp_cache_get( $file, serialize( $cache_args ) ) ) !== false ) { | |
if ( ! empty( $template_args['return'] ) ) | |
return $cache; | |
echo $cache; | |
return; | |
} | |
} | |
$file_handle = $file; | |
do_action( 'start_operation', 'hm_template_part::' . $file_handle ); | |
if ( file_exists( get_stylesheet_directory() . '/' . $file . '.php' ) ) | |
$file = get_stylesheet_directory() . '/' . $file . '.php'; | |
elseif ( file_exists( get_template_directory() . '/' . $file . '.php' ) ) | |
$file = get_template_directory() . '/' . $file . '.php'; | |
ob_start(); | |
$return = require( $file ); | |
$data = ob_get_clean(); | |
do_action( 'end_operation', 'hm_template_part::' . $file_handle ); | |
if ( $cache_args ) { | |
wp_cache_set( $file, $data, serialize( $cache_args ), 3600 ); | |
} | |
if ( ! empty( $template_args['return'] ) ) | |
if ( $return === false ) | |
return false; | |
else | |
return $data; | |
echo $data; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment