10 Things You Need to Know About WordPress 2.3

We have a tradition around these parts of publishing information for the WordPress community surrounding a new major release of WordPress. With WordPress 2.3 to be released on September 24, 2007, I think it’s appropriate to follow the tradition and let you know about the ten things I think you should know about WordPress 2.3. There’s a lot under the hood that I can’t cover in this article, so particularly if you’re a developer, you should go look at the code and figure out what new hooks and functionality you can find.


Yes, tags have arrived. They have been a long time in coming and, in my humble opinion, are not perfect – but they are good. Tagging in WordPress is ad hoc and the UI presented demonstrates that. In fact there is very little UI, just a form field below the write screen area that takes a comma separated list. The methodology does reinforce the concept that tags are not hierarchal.

Observant users may notice that there is no way to edit those tags, manage a list of tags, or delete tags. I will point out that, there are already plugins that add management tools to WordPress for tagging and the development team has purposefully taken a “wait and see” approach to tags in this release. It does not make a lot of sense to add tons of UI that is later discovered to be superfluous or rarely used. Instead, they have opted to wait and see what plugins become popular with an open mind about possible integration in future releases.

Added: I was also notified about another plugin for managing tags called ClickTags. I have no first hand experience with either of these so anyone who can provide further input, I’d love to hear it.

Let me share some of the in-built changes that tags bring to the table.

  1. Terms Table – For developers, there is a new table called wp_terms. This table is a lookup table of sorts that shares terms between categories, tags and bookmarks. In previous releases, the wp_categories table was shared between categories and bookmarks and this table was the crux of the new development approach that was taken after tags were dropped for WordPress 2.2 and rebuilt from the ground up for WordPress 2.3.
  2. New Tag and Terms API – Plugin developers will appreciate new API that inevitably comes with a new feature this large. Take a look at the new

    for lots of new API functionality. Note that the new API probably effects more than tags, but I don’t know for sure. It probably interacts with category and links/bookmarks/blogroll API as well. If your plugins interact with this API, make sure your plugins still function as expected.

  3. New Template Tags – There are not a tremendous amount of new template tags dealing with tagging, however theme designers should be aware of them and adjust themes as necessary. Bloggers, feel free to hack your themes to use these functions, however, you may want to wait and see if your theme gets an update for WordPress 2.3 before you upgrade. There may not be a lot of documentation at first, so be sure to refer to

    to see what arguments can be passed to these tags (though all should work without any arguments whatsoever):

    • 1
    • 1
    • 1
    • 1
  4. Tag Importers
    • Ultimate Tag Warrior
    • Jerome’s Keywords
    • Simple Tags
    • Bunny’s Technorati Tags
    • WordPress categories

I have been running WordPress 2.3 on this blog since pre-2.2 when 2.3 was supposed to be 2.2 and was branched to nuke the original tag concept and still hit the release milestone dates. I will tell you from first hand experience that importing WordPress categories does not associate those tags with entries that previously had the identical category. I think that will be a common question so I’d like to answer that here.

Feel free to gripe or complain or praise and adore the new tags functionality. If your voice is not heard then WP devs will be left to assuming what the community wants. As this is a community resource, I do invite you to express your opinions on the tagging feature here. Please keep it respectful though as the people doing this stuff by and large are volunteers devoting their time and energy to make WordPress better for everyone. If you behave respectfully, chances are your voice will be heard and not ignored.

Update Notifications

Update notifications have been a long requested feature of WordPress and thankfully in this release, it’s been delivered – not once, but twice. Now WordPress can alert you when a new version of WordPress is available as well as new plugin versions. I find the plugin update, particularly, very HAWT.

Canonical Redirection

This has long been a bane of every webmasters existence. Canonical URLs are treated differently by Google and the search engines meaning the www. version of a site is considered to be a different page than the non-www version. Search engines see two different pages and penalize one as duplicate content.

To fix this, many webmasters and bloggers, including myself, have taken steps to redirect one version to another. In my case, I redirect www versions of my URLs to non-www versions. Now, WordPress handles this internally based on the value you set as your website site URL under the Options > General page. In essence, this means instant SEO benefits to WordPress 2.3 users.

Post Workflow Improvements

Two more often requested features is better draft management functionality as well as a better editorial workflow for non-Editor, non-Administrator writers. While the second is amazingly better, the first is a step in the right direction but still not “great”.

Draft Management is improved by adding a series of dropdown menus on top of the blog’s Manage page. From this list, you can quickly select posts that are in draft status. This does not do away with links to draft posts that has traditionally been located at the top, but this too has received some TLC. If you’re a blogger that keeps lots of posts in draft for a rainy day, or simply start posts and save them to draft to work on later, you’ll be familiar with “Draft Hell” where multiple levels of links can crowd the top of the page and become unwieldly. Some smart massaging happens to this list now and displays two drafts and adds an “and more…” link to the end leading the blogger to a page listing draft posts. Aesthetically this is great, however I still think the management of drafts can be a bit unwieldly and ugly.

The second bit that pertains to workflow management has to do with “pending review” posts. These are great for multi-author blogs where “Author” level bloggers do not have the rights to publish an entry without a review. Unfortunately, in previous iterations of WordPress, an Administrator or Editor had to pay close attention to when blogs were ready for review but now, they are notified. This is an excellent editorial workflow item that is long overdue.

Pluggable Dashboard

If you’re pretty tired of getting all the stock WordPress and Technorati links on your WordPress dashboard and want to make it more useful for you, the dev team has made the WordPress dashboard customizable via several new plugin hooks.

We’ve been using this at b5media already to provide bloggers with feeds that are more relevant to them as well as replacing Technorati results with Google Blog Search results under Incoming Links. So far, no complaints!


A feature that will only make hardcore developers giddy, there is a not-yet-used-yet-still-functionally-solid method added to the database class. the


method is a handy little method that can be used to nuke SQL injection hacks before they become an issue by creating safe SQL code. Like I said, it’s not in use yet in WordPress because the devs ran out of time prior to release of WordPress 2.3. The feature is officially slated for WordPress 2.4 but I thought I’d point it out as the code is in place (and subject to possible modification in advance of its official support in WordPres 2.4.


Atomlib is a relatively late addition to the WordPress 2.3 codebase. It was created by none other than the great Sam Ruby who was influential in creating the Atom feed specification and the Atom Publishing Protocol. Atomlib provides a support library to the Atom products supported by WordPress – the Atom Publishing Protocol and the Atom 1.0 feed. As it is a self contained library, the potential for its application in other ways is there if a developer wanted to sling some code to create new functionality or plugins.

Deprecated Functions

Not a significant issue as I have not seen the two functions that have been deprecated in widespread use in the community. Yet, as a new release comes along and deprecates some functionality, I feel it necessary to point them out. In the case of WordPress 2.3, only two functions have been deprecated – and they both relate to permalinks. The first one, template tag


has been deprecated in favor of


. I believe most usage examples as well as most theme designers already use


so I doubt this will have much effect. Additionally,


has been deprecated in favor of



As usual with deprecation, the functions still work and are available. However, it is advised that the new format be used as deprecated functions will eventually be removed from the core.

Multiple Category Widgets

With the advent of tags and terms, the possibility has been introduced to have different “groups” of categories organized in different ways. To that end, the Categories widget has been expanded to allow multiple category widgets. Though these widgets are not overly useful, someone may be able to find some uses for multiple category widgets.

Pluggable RSS Library

A common complaint in the WordPress development community has surrounded the inclusion and forced use of Magpie as an RSS parsing library. We at b5media, for instance, find a much better and supported library (Magpie stopped being developed awhile ago) in SimplePie. There may be other RSS parsing libraries available. The point is, WordPress is all about being extensible and offering the user choice.

To that end, there is a new plugin hook called


which allows plugin authors to load a different feed parsing engine if they so choose. I find this very interesting and useful. Others will not, but again, it’s about choice.

WordPress 2.3 brings us a lot of good things. It’s certainly not perfect. I’d personally recommend that everyone wait before rushing right out and upgrading. There may be breakage so make sure you back stuff up. With a new version, it’s usually wise to wait a few weeks and let plgin authors catch up and update their plugins. Of course, the fewer plugins you use, the better off you’ll be – but that’s a matter of choice. Overall, this is a very solid release in my opinion.

Also, I’d love it if you Dugg this article if you find it useful.

WordPress FAQ: Troubleshooting a WordPress Install

Help! My WordPress install is borked and I don’t know how to fix it or even where to begin looking

This question is actually inspired by the support thread over at the WordPress Support Forums regarding a percieved bug in the Autosave feature in WordPress 2.1. In that thread, things got very heated as one camp was distraught while the other camp was trying to figure out what was going on and couldn’t duplicate the problem.

The rules of thumb when troubleshooting – whether yourself or by asking in the support forum, mailing lists or via consultants such as myself, is to provide the most complete information possible.

For instance, whether for WordPress or any other software, try to ascertain:

  1. Plugins installed and versions
  2. Theme used
  3. Browse, OS, version numbers
  4. Firefox extensions used, perhaps
  5. Can you reproduce on a different computer?

In the case of this support issue, it seems to me there is a plugin run afoul and I provided this approach:
Disable ALL plugins – particularly ANY plugin that MIGHT have javascript in use. Does this solve this problem? (Note: it will probably create errors on the template because now plugin functions aren’t available – don’t worry when you reactivate those things will be fixed).

If that fixes the issue, take the divide and conquer approach and reactivate half your plugins (that you were using). Does the problem come back? If no, activate half of what’s left. Repeat and rinse.

If you activate plugins and the problem does return, focus on that group of plugins. Deactivate half of them and check for the problem. Does it occur? Yes? No? And so on until you find the culprit.

If none of this solves the issue, kick your theme over to Kubrick (though I doubt this is a theme related issue since the error is in wp-admin but for due diligence, follow through and check it out).

I am 99.999% sure you will find the culprit.

Be methodical. Provide detailed info on how to reproduce.

WordPress FAQ: How Do I Integrate WordPress Into a Non-Blog Site?

I have a site that is a non blog site and I want to add a WordPress blog and allow the rest of the site to benefit from feeds, users, etc from the blog itself. Is there any easy way to do this?

Absolutely, this is a simple process. I’ve had a number of people ask me how to do this over the past year and a half or so. Depending on what your ultimate goal is, there are three options. Choose your poison.

Option 1: Limited Integration

The first option is the easiest and requires no code modifications. In fact, it is as simple as uploading the blog to a separate directory (i.e. ~/wordpress) and following the normal routine of installation. The only difference is that your blog permalinks will look like this: http://www.example.com/wordpress/.

Following this method, you could then place permalinks into place on the non-blog site manually. This is beneficial if you don’t anticipate the need for a lot of dynamic blog content outside the blog.

Option 2: Permalink Integration

The next option you have requires a small code modification but will give you access to all of WordPress code and internal API for integration into the site. After uploading the blog to the non-root directory (i.e. ~/wordpress), simply copy the wordpress index.php file into the root directory of the site. Modify this code in the file to point to the correct code




You can verify that this modification was successful by browsing to the new index.php. If there are no errors reported and the blog loads, then you’re good to go. Now just go and make appropriate modifications under the Options page of wp-admin. The blog address field should be appropriately updated.

Incidentally, if you have your own index.php page, you can add the code from the WordPress index.php file to the top of your own file. No harm, no foul.

Option 3: WordPress as a Content Management System

The final option you have could be a topic in itself: WordPress as a CMS. WordPress provides options that allow you to define custom templates for specific pages or allows you to define a specific post or page as the home page – from within WordPress!

Richard Sipe has a great write up on how to do this. If you would like to manage your entire site, both blog and non-blog, from within the easy to use interface that is the WordPress admin – this is your solution.

WordPress FAQ: What's the Best Way to Backup my Blog?

What can/should I do to protect, secure, backup, etc.?

Earlier in this series, I answered the question about migrating to a different host. In that article, I gave an overview on how to backup your database.

Technically, you can use the same instructions to backup your blog. Do a database dump via phpMyAdmin (ask your host if you don’t know how to use this) and FTP your files down. You could also, if your adept and have the necessary SSH access, setup a cron job to run a script that will dump your database and archive it along with all your files on a daily or weekly basis.

It might seem like I’m dodging this question, but that is only due to the fact that there are lots of ways to do this.

Instead, I’ll talk about backups in general. Whenever you make any major changes to your blog ecosystem, you should back up your database. That means, whenever you upgrade, move to a new host, close down a blog – back up! You don’t know if you’ll need that data again.

Failure to backup, and subsequently messing something up, does not constitute a WordPress problem. :-)

WordPress FAQ: Benefits of Tagging

What advantages obtain from direct tagging, whether manually or by widget, vice using the WP category?

This question comes from James Joyner.

This is a widely-held debate, so I’ll provide my own opinion. ;-) As far as Technorati, and perhaps Google Blog Search is concerned, WordPress categories and tags are one and the same. However, there is a deeper semantic difference that affects users as well as information architecture. In fact, I think we’re on the brink of seeing more tagging-related services that treat tagging differently than categories. WordPress 2.2, for instance, will have tagging in the core in addition to categories.

From a birds eye view, I generally describe categories as filing cabinets. Posts go in different filing cabinets based on politics, sports, web development, local restaurant reviews, etc. However, tagging is much more granular. For instance, there might be a local restaurant that the Baltimore Ravens frequent after practices. Tagging, semantically, allows you to label that post in a more granular way: “nfl ravens restaurant microbrewery”.

This takes another level when you get outside of posting – and this is more of an abstract philisophical argument. Maybe the future holds tagging of blogroll links (There’s already XFN, but I digress), or tagging of other people’s content (think del.icio.us). What if there were a way to use internet-wide tagging to essentially fingerprint someone’s tendencies?

Conversation can be linear in a standard blog format. Post 1 with comments about post 1, followed by Post 2 with comments about Post 2. Hyperlinking has always created a way to de-linearize conversation but it is only effective to a degree. If you think about it, tagging reflects the actual human thought process and behavior. How often do humans only think and talk about a single topic – yet, on blogs, thats exactly what happens. One post, with comments. Second post, with comments.

The second part of the question deals with actual implementation – widgets, tag clouds, etc. To me, this is secondary to the actual tags themselves. While Technorati does respect WP categories as tags, it also handles tags themselves, if they exist, as a separate entity as well. In the end, we’re going to see many implementations, but taxonomy as a whole poses a huge windfall to bloggers who choose to use them.

WordPress FAQ: Democracy Poll Feature

Why doesn’t the democracy feature allow for polls asking for voters to “check all that apply?”

Democracy is a great little plugin that allows for polls on WordPress blogs. I have a lot of history with the Democracy plugin, but fortunately the plugin has come a loooong way and improved quite a bit.

I asked the developer of the plugin this question and this was his response (for what it’s worth):

Hmm, I haven’t decided. I haven’t had a ton of people asking for that feature, it’s been requested over the years but not enough to be worth it to everyone. Democracy isn’t being actively developed, but I think it’s generally feature-complete enough. Of course, it’s not perfect…If a lot of people get in touch with me to request that feature, I might reconsider.

There’s your call to action. If you want it, make yourself known. True Democracy, eh? :-)

WordPress FAQ: What is the best way to upgrade a WordPress 1.5 blog to WordPress 2.1?

Okay… my personal Blog (the one the leaf has been removed from) is an older version of WP (waaaaaay back to 1.5 something) and has been seriously re-designed by Khaled Abou Alfa from 9rules (a dam* good man btw).

I would love to upgrade it to a current version but there is where I lose all touch ‘cuz I ain’t a tecchie like you

I have not the first idea where to begin and honestly am scared silly about screwin’ up the re-design.

This question comes from reader Mark Wade.

Setup a local Version of your Blog

Mark, I’m not sure of what your template uses but chances are, it is already WordPress 2.1 compliant. What I’d suggest doing is setting up a local version of your blog. If you’re using Mac, then you have an out-of-the-box web server already configured with PHP and MySQL. You would just have to setup a database and import your posts/comments/categories to give you actual content using the methods I described in a previous series entry. If you’re on Windows, you might have to employ Kevin Yank’s instructions on setting up Apache, MySQL and PHP locally. It’s not too complex and I generally advise people who do their own mucking around to do this anyway for testing before rolling something to a live blog.

However, you can risk it and try the upgrade first anyway. The problem is, you can’t roll back if you mess something up.

Upgrade Incrementally

Having followed this procedure on your test blog (you did take my advice right? ;-) ), I recommend an upgrade from such an earlier version be done incrementally. That is version 1.5 to 2.0, then version 2.0 to 2.1. In theory, the upgrade can be done directly, but I know of at least one upgrade that got completely borked by making the Big Jump™.

You can download a release version of WP 2.0.x from the build archive. Choose whichever non-RC version you want.

Having done that, the recommended process is to delete everything except wp-config.php (which contains your database connection info and hasn’t changed in several versions) and the wp-content folder which includes your theme and plugins. Upload all the files in the extracted wordpress folder to your blog root. Also upload the wp-admin and wp-includes folder.

Now run the upgrade script to make the modifications to your database. The upgrade script is at wp-admin/upgrade.php. Alternatively, you can attempt to login to your wordpress admin and it will provide a link to upgrade your blog.

Now that you’re upgraded to 2.0, go through and check the functionality of all of your plugins. If anything is broke, go find an upgrade. In fact, I’d check for upgrades anyways in case there have been security fixes. A lot of plugins broke between WP 1.5 and 2.0 and plugin authors have usually provided 2.0 compatible plugins.

If everything checks out, repeat the procedure to bring your blog up to WordPress 2.1.x. The latest is 2.1.3. Again, check your plugins.

In theory, unless your template is relying on deprecated template tags available in previous versions of WP, your theme should remain intact. In general, WP development attempts to preserve backwards compatibility but some functions get removed after being deprecated for several releases. Again, just check. And if you didn’t take my advice about a local version of your blog, shame on you. ;)

A final option you have is to hire me and I’ll take care of the upgrade for you.

As usual, reader questions are being solicited. Drop me an email about any WP question you have at all! :-)

WordPress FAQ: User Roles Confusion

I’ve seen the roles list in the User page. But what’s the difference between an Author and a Contributor?

There are five built in roles in WP2.0+. These roles, Administrator, Editor, Author, Contributor and Subscriber compartmentalize most of the groups of functionality in WordPress.

Naturally, Administrators can do everything. If you own a multi-author blog, chances are you want to be the admin and assign everyone else lower permissions. Administrators have appropriate permissions to change themes, activate/disactivate plugins, set global blog options, etc.

Editors, assume post-level management. As in a newsroom, editors don’t worry about the lights and the cameras. They are worried about the copy. To that end, editors have the right to manage post-related stuff. They can add their own, edit their own or delete their own – but more than that, they can edit or delete other peoples posts.

For authors, the assumption is that they are staff writers and are allowed to write whatever they want, whenever they want. Not only can they write stories, but they have the authority to publish them without review as well.

Contributors tends to work well on blogs where user generated content is welcome. People can submit their own stories but in the end, they cannot publish without an Editor. Editors or Administrators have the ability to go review the Contributor’s work and decide whether to publish or not.

Subscribers have no blog-level abilities. The benefit to subscribers is that, among other things, they can prepopulate the comment forms on the blog. Some blogs also require registration to comment. Subscribers are readers with a username and password – that’s it. No more. No less.

A word about User Levels

Some older plugins continue to use User Levels to handle permissions. User LEvels is a legacy item from the WordPress <1.5 days. It has been deprecated which means that while it is still in the core, the realism is we are two majore releases beyond 1.5 and User Levels will not be around forever. It is simply maintained for backwards compatibility. Anytime User Levels is mentioned in regards to WP, your warning flags should go up.

Of course, there is a fantastic plugin out there that allows a blog owner to modify existing roles and capabilities or even add other roles and capabilities. If the five solutions out of the box don’t quite work for you, you can change it up.

For more information on Roles and Capabilities, you might want to take a stroll through the Codex page.

WordPress FAQ: How do I Move my blog to a new host?

What is the process for moving my WordPress blog to another host?

As the technology manager at b5media, my team is often asked to migrate a blog to our cluster. Usually, when that happens, I ask a bunch of relevant questions:

  1. Is the blog a WordPress blog? If not, what platform is it?
  2. Are we going to continue to use the same domain or do we want to use a new or existing one?
  3. Are we merging this blog with an existing blog?
  4. Is it important to preserve permalinks?
  5. If this is a WordPress blog, what version of WordPress is being used?
  6. How many authors?

Lots of relevant information is needed to migrate a blog. This question is about moving a WordPress blog so we’ll assume that it’s not a Movable Type, Typepad, Blogger or Expression engine blog. Or any other platform for that matter. WordPress.com counts as a “WordPress” blog though. ;-)

Solution 1: Quick Move

The easiest way to move from one blog to another, particularly if you’re moving the blog to a new domain and both already resolve (talk to your registrar or host to get help with DNS resolution) then you can move your categories, posts and comments using WordPress’ export functionality. This is native in WP 2.1, however, you can achieve nearly the same thing with my WordPress-to-WordPress importer. Having the WXR file, as it is called, in hand you can import into WordPress 2.1 at the new location.

The sacrifice you give up in preservation of options. You’ll have to go in and set your permalink structure, your blog name, description, number of posts to display and any other options. You will have to upload and activate plugins, etc. This is a content migration solution only.

Incidentally, this is the only way to move off of WordPress.com and the only way to merge a blog into another one – say if you were retiring it.

Solution 2: Full Move

If the quick way doesn’t provide satisfactory results, you can do the full way. I always recommend doing whatever you can by SSH, but some hosts won’t allow for that and some folks are simply scared stupid of command line. Is text really that scary? :)

1. First of all, back up your database. You can do this via phpMyAdmin. I would not recommend the formerly-bundled wp-db-backup plugin for a number of reasons that ultimately end in the reason why it is no longer a bundled plugin. If you’re using SSH, you’ll want to use the



mysqldump -uUSER -p DBNAME &gt; dump.sql

2. Now, grab your files. Most people choose FTP for this, but again, if you can use SSH to create an archive file of your data, do it for reliability reasons. Make sure you grab your .htaccess and database dump as well.

tar cvf archive.tar path/to/blog/dir path/to/dump.sql

The compress it:

gzip archive.tar

This will create a file called


that you can grab via SFTP or FTP and transfer to your new server.

3. On the new server, you have to restore everything back in to place. First, make sure you have a database setup for your blog on your new server. If you just used FTP to grab all your stuff, ignore the next bit. If you tarred your archive and database dump, I’d recommend untarring in a temporary location.

tar zxvf archive.tar.gz

Now, whether you used FTP or SSH, you can move your data files into the proper location and run a:

mysql -uUSER -p NEWDBNAME &lt; dump.sql

With any luck, once your DNS is pointed at the new server and begins to resolve, your blog will be perfectly moved.

WordPress FAQ: How Do I Fix the Blogroll Category Issue in WordPress 2.1

In WordPress 2.0.x there was a simple facility to bulk change the link categories for numbers of links. Unless I’m mistaken, that appears to have been dropped from 2.1.x.

I’ve just imported 52 links to what’s now called the Blogroll (it used to be “œLinks”) and have had to add the link category individually to each one. To say that’s time-consuming is an understatement, especially if you have lots of sites to do.

This question comes from John Evans who outlined the problem is greater details over at Syntagma.

First of all, welcome to the club, John. You’re not the first person to encounter this problem and unfortunately, you won’t be the last.

Depending on how many blogroll links you actually employ, your solution may be the easiest and quickest. However, if you have LOTS of blogroll categories and the upgrade from WordPress <2.0.x to WordPress >2.1 did not make the proper associations, you may not have as much luck. I discourage manual editing of the database in this case because there are multiple lines of logic and different fields that would have to be updated.

The good news is that as of this afternoon, I submitted new functionality for consideration in the WP core that would address this issue. The bad news is that this might not make the WP 2.2 release on April 23. If you feel comfortable applying your own patches, feel free and let me know how it goes.