I’ve been working on developing my own theme for WordPress, and the more I work on it, the more I learn how WordPress examplifies both the good and bad of open-source software projects.
The good is that a lot of people use it and develop for it. Problems seem to be patched quickly. There seems to be more innovation surrounding it than Movable Type.
The bad is that it feels as if there’s nobody in charge. This becomes acutely obvious once you start looking at the tag system. Even the tag nomenclature is not close to consistent, with some tags prefixed by “wp_”, some by “the_”, some by “get_”, some by “list_” and some with no prefix. There are some swiss-army-knife tags that can do many different things, with their output controlled by arguments, and there are some that are extremely specific, such as the tag that returns the blog author’s first name. Tag arguments are another area of inconsistency, with two completely different ways of expressing arguments, with some tags using one, some the other. There’s a lot of duplication of effort between tags, with one tag that returns a permalink formatted as a link and another that returns only the raw URL. And there’s inconsistency between the behaviors of tags, for example, the “wp_dropdown_categories” tag generates a dropdown menu of categories as a monolithic block of HTML; wp_get_archives, which generates date-based archives in a variety of formats can be used to produce a dropdown menu of monthly archive pages, but this is more atomic and makes it easier to tweak its output.
Perhaps some of these differences make sense to the programmers behind the project, but even so, they do not make sense to someone trying to write a template. I suspect some of the inconsistencies result from either lack of standards in the project, or lack of attention to standards if they exist. WordPress really should have someone stand up, acknowledge the mess, and lay down the law. I suspect if I delved deeper into the code, I’d discover more evidence of inconsistency.