﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
21673	Passing scoped variables and doing partial page caching with get_template_part	sc0ttkclark		"I've recently developed an interesting class that provides an advanced get_template_part() experience.

This class has some stuff baked in for the project it was for, but it really provides a great proof of concept for a big addition to get_template_part().

I am suggesting we add three new arguments to get_template_part():

{{{
function get_template_part ( $slug, $name = null, $data = null, $expires = null, $cache_mode = null ) {
}}}

$slug and $name are great and all, but they lack the ability to reference currently scoped variables like a normal include/require does. One way around this is to pass $data into get_template_part(), like so:

{{{
<?php get_template_part( 'twitter', 'feed', compact( array_keys( get_defined_vars() ) ) ); ?>
}}}

This at least gives get_template_part() access to the currently scoped variables or any others you would like to pass in for context of a specific get_template_part() call. $data would then be passed to load_template() just above the $wp_query extract:

{{{
if ( !empty( $_data ) && is_array( $_data ) )
	extract( $_data, EXTR_SKIP );
}}}

The last two variables are centered around caching. $expires functions as you'd expect, it's a integer of seconds, where 0 is to not expire. $cache_mode would accept one of three values: cache | transient | site-transient

Caching get_template_part() can be very handy, especially for content that won't change often, and especially for cases where you have logged in users but no ability to offer full page caching (not recommended, as you've come to know).

'''Partial page caching is where it's at''', this would be a big step up for theming within WordPress. I'm also not opposed to splitting this ticket up into two, one to pass $data into get_template_part(), and one to create a new function that hooks into get_template_part() using output buffering, something to be named like get_template_cached().

You can see my proof of concept as it currently exists in Pods 2.0 core, just ignore the parts that aren't exactly like get_template_part() :)

https://github.com/pods-framework/pods/blob/2.0/classes/PodsView.php

{{{
pods_view( 'location/of/file.php', compact( array_keys( get_defined_vars() ) ), ( 60 * 60 * 24 ), 'site-transient' );
}}}"	feature request	closed	normal		Template	3.4.1	normal	invalid		mikeschinkel@… ian_dunn@…
