How many times have you flipped on the morning news to get the day’s forecast? Sure, you can guess at the basics (if it’s a summer day in Texas, it’ll be hot, right?), but we still like the extra details a meteorologist can offer.
Is it raining ? Are water restrictions in effect? Will I die of heat stroke if I run after work? Is it raining men?
Each of these details give us the information we need to make the best decisions for our day. So, if it’s going to rain, I’m going to cancel pool time and head to the movies instead. If we’re hitting a record high, I’m going to suck it up and jog on a treadmill instead of pounding hot pavement.
In much the same way, we can use WordPress conditional tags to show when certain situations ring true and then use that knowledge to change the default behavior. Even better, WordPress conditional tags are always 100% accurate, unlike meteorologists. 🙂
Rain Down Some Details, Carrie
You’ll typically find WordPress conditional tags used in conjunction with PHP conditional statements (i.e. if/else). It’s a big conditionals party, really.
You can use these conditional checks in your theme’s functions.php file or in individual theme template files. We’ll talk a little more about that later.
Start with the Basics
While my WordPress site might not care if it’s raining, perhaps it does care when a single post is displayed. Here’s a basic example of how WordPress can know if that’s true:
if ( is_single() ) {
echo ‘Hey there, singleton!’;
}
The is_single()
tag returns true
if any single post, attachment, or custom post type page is being displayed. This bit of code isn’t very useful, but it does demonstrate a PHP conditional statement (if
) with a WordPress conditional tag ( is_single()
).
A Real Example
You can use these conditional checks anywhere in a theme, but not every place makes sense. For example, if I’m working on a single page template, it wouldn’t make sense to ask the page if it’s single (i.e. is_single()
). That’s like asking a drop of rain if it’s wet.
Instead, we should ask when we don’t know the answer, like in our theme’s functions file. Here’s an example:
Write it in code:
if ( is_single() && is_author('Carrie') ) {
$classes[] = ‘giddyup’;
return $classes;
}
Say it in English:
If the post being viewed is single AND Carrie is the author, then apply a special body class called ‘giddyup’.
The Bigger Picture
If we stuck the code above in our theme’s function file, it would do a BIG FAT NOTHING. Why? Because to “interfere” with the default WordPress output, we need to hook into the code using an action or a filter. (If you’re using a theme framework like Genesis, you’ll have even more actions and filters at your disposal).
In order for our code to work, we need to make a function out of it and then use a filter to tell WordPress where/when to pull the trigger on our code.
Write it in code:
add_filter( 'body_class', 'my_body_class' );
function my_body_class( $classes ) {
if ( is_single() && is_author(‘Carrie’)() ) {
$classes[] = ‘giddyup’;
return $classes;
}
}
Say it in English:
At the point where WordPress assigns a class to the <body>
tag, add a custom body class of ‘giddyup’, but only if it’s a single post authored by Carrie!
Learn More About WordPress Hooks
Yours truly has a course on LinkedIn Learning that will make you 100% confident working with hooks! Check out my course WordPress: Action and Filter Hooks.
I Wanna Get Absolutely Soaking Wet
This is a mere sprinkling of what you can do with WordPress conditional tags. If you want to delve into plugin development or theme customizations, you’ll need to spend time immersing yourself in conditionals.
Did I overdo the water words? You’re welcome.
Here’s a link so you can bookmark the official codex page: WordPress Conditional Tags. Visit it and visit it often.
Happy coding!
Image credits for “It’s Raining Men Wallpaper” to Jordan LaPointe.
I have a disclosure text that i put in my blog using genesis simple hook but I want it to appear only on posts and not pages. How do I do that? Thanks in advance!
Take a look at http://codex.wordpress.org/Conditional_Tags and see which one(s) apply to single posts. I’m not being sarcastic – I’d rather point you at the resource for you to figure out than just tell the answer. 🙂
Let me know what you find.
Nice tutorial, thanks Carrie.
Is it somehow possible to have different website logo displayed on frontend, based on current logged in user? Is there conditional tag or something for that purpose? Thanks.
There is!
is_user_logged_in()
Pingback: Modify Yoast Breadcrumb Text for Parent and Child pages