Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WordPress: save `get_template_part()` to variable

In short, all I need is to make my WordPress do this

$var = get_template_part( 'loop', 'index' );  

but, get_template_part() does not return HTML, it prints it.
I need this HTML stored in $var - do you have any ideas how to do it?

like image 920
Atomicus Avatar asked Apr 28 '11 11:04

Atomicus


2 Answers

This isn't what get_template_part was for, get_template_part essentially behaves like PHP's require function. Justin Tadlock writes a lot more about this here and also talks about a Wordpress function that might be more useful to you - locate_template.

Alternatively, if you did want to hack this functionality using get_template_part, you could use template buffering:

function load_template_part($template_name, $part_name=null) {     ob_start();     get_template_part($template_name, $part_name);     $var = ob_get_contents();     ob_end_clean();     return $var; } 
like image 81
Simon Scarfe Avatar answered Oct 14 '22 12:10

Simon Scarfe


I'm not loving Output Buffering, though +1 for even thinking of that as an option!

I think Helga was on to something, but you need to still respect the child_themes and the theme path, so use locate_template() instead (also as Simon suggested).

This works nicely, and can even be used inside a filter or (in my case) shortcode function (I wanted my shortcode to output the content within a template-style file, to separate the display layer from the logic layer).

return file_get_contents(locate_template("template-file-name.php")); // don't forget the .php! 
like image 24
Tom Auger Avatar answered Oct 14 '22 11:10

Tom Auger