WordPress 2.3 Theme Backward Compatibility
Over at BlogginPro, the question was posed:
My biggest question is “what will happen if we take the newly updated theme, and place it on a blog running a previous version of WordPress?”
Is there some way to check which version of WordPress is being run, or will we have to put out a WordPress 2.3 only version of each and every theme?
I’m not normally an active commenter on blogs, but since I knew the answer to the question, I figured I’d speak up and answer the question. Because of this, I figured I’d go ahead and answer it here as well.
PHP comes with the built in capability to check to see if a function exists. Since template tags are nothing more than PHP functions, it makes sense that you can very easily use the function_exists condition to check the availability of the function before actually calling it. It would go a little something like this:
<?php if ( function_exists('the_tags') ) {
the_tags('Tags:', ', ', ''); } ?>
So now, you have added the ability to add tags to your theme, without breaking it in all versions prior to 2.3.
Bonus Tip
OK, I have to admit that I haven’t actually done this for my themes, but I wanted to throw this out there as a possibility. If you’ve been developing themes for a while now, you’ve got to be aware of tags that have been deprecated. For instance, let’s say you wanted to list your categories in the sidebar. Normally, you would use the wp_list_categories function.
But if you wanted to be backward compatible, you would use the deprecated tag (wp_list_cats) instead of the new one. That way, you make sure you have a catch-all function (since WordPress doesn’t remove deprecated functions from the code for quite a while).
In reality, you’re using an inferior function, even if the user has a fully upgraded version of WordPress.
It would be better if you used the function check to make sure your theme is truly, fully backward compatible. That means that even after WordPress phases out the deprecated function, your theme still works.
This also eliminates the need to release different themes for different versions of WordPress. A single theme will work universally! Here’s a sample of how you would do it:
<?php if ( function_exists('wp_list_categories') ) { //if the new function exists
wp_list_categories(); } else {
wp_list_cats(); } ?>
Easy as cake! Enjoy your new, fully backward compatible theme!




Pingback: SultanaBlog » Blog Archive » Upgrading to 2.3 - what went wrong and how I fixed it
Gilles Roy
Hi Nathan,
Thanks for the code tip! Now… where do I input it (which .php theme page?)
Thanks,
Gilles
Nathan Rice
Gilles,
I put the code in the index.php, archive.php, and single.php files. The placement is up to you though.
Darren
I didn’t expect WP 2.3′s tagging functionality to cause problems with themes, but sure enough a theme I released last week has caused ‘undefined function’ havoc for some users. That if-statement is a good tip – thanks!
Nathan Rice
Darren,
My pleasure! Glad it helped!
Pingback: WordPress 2.3 Tag News « Lorelle on WordPress
Pingback: Access Requested to the WordPress Theme Viewer « Lorelle on WordPress
vlad lauren
Thanks for the code tip!
Thanks
Pingback: Ultimate Guide to WordPress SEO - META Keywords | Webtrendblog.com
Theme Creator
WordPress is my favorite CMS and this post is a perfect example why. Thanks for this info.
Pingback: Tips for Avoiding WordPress 2.3 Upgrade Problems