Created
September 24, 2017 03:12
-
-
Save digitalhydra/8f6f71e99f8710841d26ec9380b2a8a3 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
/** | |
* Like get_template_part() put lets you pass args to the template file | |
* Args are available in the template as $template_args array | |
* @param string filepart | |
* @param mixed wp_args style argument list | |
*/ | |
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