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:
A 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:
<div id="artistMenu"> <?php echo get_post_meta($post->ID, "artistMenu", true); ?> </div>
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:
<?php if((get_post_meta($post->ID, "artistMenu", true))) { ?> <div id="artistMenu"> <?php echo get_post_meta($post->ID, "artistMenu", true); ?> </div> <?php } ?>
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.
In 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:
<?php if((get_post_meta($post->ID, "image", true)) || (get_post_meta($post->ID, "text", true))) { ?> <div id="subheader"> <?php if(get_post_meta($post->ID, "image", true)) { $size = getimagesize(get_post_meta($post->ID, "image", true)); ?> <img src="<?php echo get_post_meta($post->ID, "image", true); ?>" alt="" width="<?php echo $size[0]; ?>" height="<?php echo $size[1]; ?>" /> <?php } ?> <?php if(get_post_meta($post->ID, "text", true)) {?> <?php echo get_post_meta($post->ID, "text", true); ?> <?php } ?> </div> <!-- END SUBHEADER --> <?php } ?>
WordPress 2.7 up and running
I just updated this site to WordPress 2.7, aka “Coltrane”. Turns out there are some rather interesting template tag changes that have caused some weird problems with my theme. I did a quick cleanup to get things sorted out but I’m pretty sure there’s more work to be done to comply with the new world order. So if you come across something that looks off on this site, please drop me a line so I can fix it.
WordPress 2.7 to be released Dec. 4th
UPDATE v.2: Turns out I jumped the gun a bit on this one: As Matt states in the comments below, it was the update to WordPress.com that was scheduled for December 4th. The WordPress.org update is still some days away. I’ll wait (im)patiently.
UPDATE: Now it seems the WordPress team has pushed the release back to “some time next week”. Guess we’ll just have to wait a little longer.
One of the great things about WordPress is that it’s a platform that evolves at a pace normally only seen in computer hardware like processors. As a result the massively updated WordPress 2.7 is being released on December 4th only a couple of months after the release of WordPress 6 (I might be exaggerating a bit with the “couple of months” thing but you get the idea).
WordPress 2.7 includes an improved back end panel that is even more user friendly than the current one along with some interesting updates on the template tag front. People are excited, and with good reason. This is going to be great.
Click here for the official announcement and a full breakdown of all the new and shiny stuff.
Typograph - new WordPress Theme
I’ve been planning to launch a proper free WordPress theme for some time now but there have always been major projects in the way. This week I had some extra time so I sat down and developed the Typograph theme which is now available for anyone to use. For free.
The theme is as simple as possible with clear separation between the content and the sidebar, a calm gray and white design with popping red links, a tabbed sidebar box with navigation, search and other important elements and some other styling for increased readability and better navigation. It complies with the new WordPress standard elements like image captions and Gravatars and even has a customizable ad space directly under the first post on the front page. And last but not least, Typograph is fully XHTML and CSS standards compliant.
Download the Typograph theme from the WordPress Theme Directory here!
See a demo of the Typograph theme here
No images
Right before I began the design of this theme, Spyremag published an article about 5 ways to break your design habits, one of which was to design a site using no images. Seeing as I’ve become somewhat obsessed with CSS over the last year it seemed only appropriate to follow this advice and create a no-images theme. Not only would this be a bit of a challenge because I ususually use a lot of images to make my designs more vibrant, but it would also put my coding skills and my understsanding of WordPress themes to the test.
Styled from scratch
Over the last several months I’ve been refining and customizing a copy of the Sandbox WordPress theme to develop an ideal platform for quick and easy WordPress theme design. The plan is to create a “God Theme” if you will that has all the bells and whistles installed and ready to go so that new theme design is quick and efficient. To put the alpha version of this foundation theme to the test I used it to style Typograph from scratch.
Tabbed box navigation
When I created the new theme for Design is Philosophy I spent quite a bit of time developing and perfecting a JQuery and CSS based tabbed sidebar box that would contain navigation as well as other useful information for the visitor. For Typograph I further developed the tabbed box and isolated it in it’s own file to simplify customization for the user. It can also easily be deactivated by commenting out a single line of code in the sidebar.php template. The tabbed box contains navigation for pages and categories along with an about section, RSS link and search box by default. It takes standard WordPress tags and can be customized to include pretty much anything by editing the tabbedBox.php file found in the theme directory.







