What you’ve got is right, so it should work, assuming that nothing else is altering things in between.
First thing is to do some basic de-bugging. Try adding this to see what happens:
<?php
echo "<p>Var value: '" . $var . "'</p>";
get_template_part( ‘template-parts/content’, $var );
?>
That will show you what the value is for $var when it’s used. If it’s not what you expect, then you’ll ned to figure out where it changes.
Thanks for your message.
It unfortunately doesn’t work… this might be about my file structure don’t you think ?
theme:
single.php (where my get_template_part is)
– template-parts
– – content-de.php (where my <?php $var = ‘de’; ?> is)
– – content-en.php (where my <?php $var = ‘en’; ?> is)
– – content-fr.php (where my <?php $var = ‘fr’; ?> is)
I had to add the following so that the single.php recognizes the location of the variable :
<?php
include 'template-parts/content-fr.php';
include 'template-parts/content-de.php';
include 'template-parts/content-en.php';
?>
Is that correct ?
Thanks !!
Also, the :
<?php
echo “<p>Var value: ‘” . $var . “‘</p>”;
get_template_part( ‘template-parts/content’, $var );
?>
is giving me the same result : “EN” which is not correct…
is giving me the same result : “EN” which is not correct…
So that’s what I said before. You need to figure out why that’s not correct. Until you do that, it won’t matter what else you do.
With your folder strucutre, that looks correct, so that’s not the issue.
Where are you actually setting the value for $var for each different template? You haven’t shown that code yet, and if that’s in the wrong place they it won’t work. If $var is global, it needs to be declared as global where it’s set as well as in the temlate, and you need to be sure that you are setting it before you are requesting the template file.
Alright ! The $var is now giving me the true result !
However, the page is displayed twice (one under the other), the first is “wrong” as it’s always english, but the last is true according to the language selected.
Do you think that this may be the cause ? :
<?php
include 'template-parts/content-en.php';
?>
<?php
if( have_posts() ){
while( have_posts() ){
the_post();
get_template_part( 'template-parts/content', $var );
}
}
?>
(that’s my full single.php page)
There’s no need to use include() at the start of your code. That’s what’s bringing in the first incorrect set of content.
Thanks but I’m then getting the following error message :
Warning: Undefined variable $var in /Applications/MAMP/htdocs/wp/wp-content/themes/custom/single.php on line 6
So where are you setting the value for $var? It seems like that’s set inside the template file, and that’s very wrong. That value needs to be set somewhere that it can be accessed by your script.
That’s what I did, I had it set in my template file. I’m now confused on where I should have it…
You can’t set a value in a file that’s included after you need to use that value.
You need to set the value in your main template file, not in the part files. As an example…
<?php
$var = {SET HERE};
if( have_posts() ){
while( have_posts() ){
the_post();
get_template_part( 'template-parts/content', $var );
}
}
?>
Perfect ! Many thanks, I’ll correct all of that !!