Tutorials WordPress WordPress Themes

Using Conditional Custom Fields for Advanced Layouts

An often overlooked function in the WordPress arsenal is Custom Fields. Overlooked because to most it makes no sense: What do you use a custom field for? And how do you use it? The answers to these questions differ depending on how the WordPress theme has been set up: Custom fields can be used for everything from passing information to plug-ins like Next Gen Gallery to feeding custom areas in the template with information. But it goes way beyond that. Custom Fields can also be used to create advanced layouts and design variances that can be triggered on a page by page or post by post basis. And this tehcnique can be edhanced further by adding conditions to the scripts so that the changes only appear when the field is actually activated.

Understanding custom fields

You can add custom fields to any WordPress post or page through the custom fields interface found right underneath the main text area. The custom field contains two elements; a name and a value. These are pretty self explanatory: When the template asks the server for the name, the value is returned. But this also means that unless the template actually asks for the field by name, nothing is returned. An example to show how this works in real life:

Artist menuA web site for an art gallery requires each artist page to have a series of sub-pages containing an artists statement, bio, CV and image gallery. Although adding an unordered list directly to the text body of the page would work, it would require the addition of style elements and tags – something WordPress doesn’t like very much. Not to mention it’s also cumbersome and messy. A better solution is to place all the style tags in the template and then just feed the menu in the form of a standard unordered list from a custom field, in this case with the name “artistMenu”. Then all that’s left is to get the template to call for the info in the custom field like this:

ID, "artistMenu", true); ?>

When the template is opened, the content of the custom field named “artistMenu” is placed as a string inside the artistMenu div. (To understand exactly how the php code works you can read about the get_post_meta template tag in the WordPress Codex.)

Making the custom fields conditional

The problem with the example above is that even if there is no custom field defined, the div is still placed in the page taking up space. Not a big problem when it’s just a horizontal menu but if you use a custom field to populate something larger, like an image gallery or a text box, it will look weird if the box is left empty. One way of avoiding this is to make two separate templates, one with the custom field code and one without, but that can quickly become complicated. And the whole idea here is to make things simpler, not more complicated. A better way is to make the code and the call for the custom field conditional on whether the custom field has been defined in the first place. This can be done with a simple if statement:

ID, "artistMenu", true))) { ?>
ID, "artistMenu", true); ?>

Using conditional custom fields as design elements

Now for the really cool stuff: Because we can make custom fields conditional, and because we can populate them with pretty much anything, we can use them not only to add images or text but also to add all new design and layout elements. In the site I built for Sablok & Salbok Notaries Public I used this technique to create a header element that only appears if the custom field is populated by an image or text. The actual appearance of the element is controlled by standard CSS. You can see this layout element as the blue horizontal area in the image and on the front page of the site.

Sablok & Sablok custom fieldIn this particular example the custom field can be populated by an image. Rather than forcing the user to input all the image code in the custom field manually I added some extra code in the template that gathers the width and height of the image and creates the proper element code. As a result all the user has to do is provide the URL for the image. There is also an or condition in the if statement so that the custom field code in the template is triggered either when an image field or a text field is defined:

ID, "image", true)) || (get_post_meta($post->ID, "text", true))) { ?>
ID, "image", true)) { $size = getimagesize(get_post_meta($post->ID, "image", true)); ?> " alt="" width="" height="" /> ID, "text", true)) {?> ID, "text", true); ?>

By Morten Rand-Hendriksen

Morten Rand-Hendriksen is a Senior Staff Instructor at LinkedIn Learning (formerly specializing in AI, bleeding edge web technologies, and the intersection between technology and humanity. He also occasionally teaches at Emily Carr University of Art and Design. He is a popular conference and workshop speaker on all things tech ethics, AI, web technologies, and open source.

32 replies on “Using Conditional Custom Fields for Advanced Layouts”

I know its a been awhile … but I’m trying to do the same thing you described: use custom fields to call a different header template for different pages but I can’t find any good instructions! Any chance you could described how you did this? Thanks.

Thanks for posting the conditional code for this! Perfect… πŸ™‚

I’m using this to make some pages that look more like web pages for a client. Will be great!

Cathy Tibbles

I read your website every week, its great and got lots of information to take in and lots of interesting articles.

Thanks so much for sharing. I was using a custom field with out a conditional tag and discovered IE 8 showed a red x for the image if one was not set. All gone now!

thanks, its really nice.
One more question,
if I want to duplicate the same custom field then what should I need to do?

ID, “artistMenu”, true))) { ?>

ID, “artistMenu”, true); ?>

I want to show the same condition twice but off course the content will be different even the custom field name is same.

I’ve been using custom fields for a while now and thought what could be possible with conditional formatting for custom fields. You completely opened my mind with what I can do with WordPress Themes Design. Thanks again!

Comments are closed.