I need to create a variable that can be accessed throughout my WordPress Theme template files (index.php, header.php etc..). I know function definitions go inside the functions.php
template file (in your theme path), but there’s no such thing for variables.
For example I constantly need to retrieve Categories in my Theme, so I would like to have this accessible from anywhere in my theme:
$categories = get_categories(); /* get_categories() is a wordpress function */
This way I can simply access to allocated data, without having to re-allocate it every time I need to get my categories.
Unfortunately adding that piece of code in my functions.php
file, doesn’t work, neither does making the variable global
.
Apparently
global
does the trick.The problem was that my variable
$categories
should have been redefined with aglobal
in front of it, in each template I needed to use it.Dominic (don’t know how to add a note to his answer):
define only accepts scalars, so you couldn’t do
define( CATS, get_categories() );
and not even
Otherwise define works fine, and it is in fact safer for scalars (as you can be sure the constants cannot be overwritten)
I know this one is really old, but there is a room for improvement.
You should consider using $GLOBALS[‘categories’] instead of just global.
There are two reasons for this:
global $categories;
everytime.Consider this code:
Only if we initialize global state right before using variable, it’s pretty hard to tell, if it’s global or not. And don’t forget to repeat it in any of template files you have.
It’s possible to use naming conventions for that, but there is a better way, in my opinion.
Consider using
$GLOBALS['categories']
.We only have to initialize our variable one time in functions.php without having to think about
global $categories
again. And we can see it’s a global one.print_r ($GLOBALS['categories']);
Performance issue is not a an issue at all in this situation. I’ll quote Sara Golemon (link):
This also works:
in functions.php add
define('TEST', 'this is a test');
and in your header.php or whatever
echo TEST;
Is there any perfomance advantage to one method over another?