One caveat faced by developers using get_template_part
is the inability of passing variables to the loaded templates. There is, however an alternative using locate_template
.
Overview
In this example we’re going to display three Easy Digital Download entries. I’ve been using EDD for a while now and while it has a lot of features it’s still surprisingly lightweight. We’ll be fetching the entries and saving them in the variable $edd_download
. We will then load the template passing the variable. Actually, to pass the variable is to say too much. We’ll be simply loading the template in a way the $edd_download
variable has the proper scope to be used in the template loaded.
Caller code
This code can be placed in a function. You can then plug that function to an area of your theme using an action hook or simply call the function as a template tag. In my themes, I use hooks so users can later add or remove content. This is all we need for the code:
[php]
‘download’,
‘posts_per_page’ => 3,
)
);
if ( $edd_download ) {
// Check if the template exists and save its location
$part = locate_template( ‘parts/download-home.php’ );
if ( ” != $part ) {
// if the template location was returned, load it
require $part;
}
}
[/php]
Template code
Now we need the template file. If you notice the call above, the locate_template
expects to find the file download-home.php
in the directory parts
inside the theme folder.
[php]
<a class="product-link" href="” title=””>
[/php]
We must always remember to call wp_reset_postdata()
after a foreach loop if we called setup_postdata()
.
Closing Words
So after all this, why is this useful? because users can create a template in a child theme and easily override the original template. It’s all about making life easier for your users. Sure, this can also be achieved through filters or creating pluggable functions but some users might consider editing a template focused on one task a cleaner approach than dealing with a file with a lot of functions for several different and unrelated tasks.
Gracias por compartirlo, quisiera mas sitios en spanish
ohh its great idea and trics passing variable during loading templates in wordpress.. i did this for my website
i also use same for my website udaipur web designer for india.. thank you so much for sharing this amazing one.. thanx
its s good code for passing variable