WordPress code quality
WordPress calls itself a “state-of-the-art semantic personal
publishing platform” — but the engine that lies beneath this shiny,
smooth-looking CSS-styled surface is not that nice.
I find the coding standard in the current (version 1.5.1.1) code to be below what I would expect from a piece of software as popular as WordPress:
Global variables are used all over the place! Global variables should be used sparsely, if at all, for they often make the code more difficult to understand. Other people agree that Global Variables are Bad.
From looking through the code I’ve found a
$wpdb
variable which is used as a global handle to the database. That’s fair enough — such a handle is needed, and lots of different pieces of the code need access to it. But still it could be handled better if one consistently used$GLOBALS['wpdb']
instead ofglobal $wpdb
followed by a later use of just$wpdb
— by using the$GLOBALS
array one precisely describes that this variable is just that: global.There are also lots of other global variables in the code, and they are often used in a much more subtle way than the
$wpdb
variable. A simple count of the (unique) variables declared global in thewp-includes
directory gives no less than 108 variables!Lack of comments! The core files such as
functions.php
contains tons of functions, but no comments. Take a random function likemysql2date()
with a signature offunction mysql2date($dateformatstring, $mysqlstring, $translate = true)
is hard to understand without reading the code. The source has no doc comments which describe the arguments or the result type.
The online documentation website, the Codex, is still very incomplete when it comes to information about the internals, and I would much prefer to have the documentation right there where it’s needed: in the code.
Duplicated code! Why does the code in
post.php
not use thewp_insert_post()
function declared infunctions-post.php
? Instead it seems to duplicate the logic inwp_insert_post()
, something which will sooner or later lead to problems.Incredibly long lines! It is clear that there has been made no attempt to break the code into lines at a reasonable site (that is, less than 80 characters per line).
Those long lines makes the code annoying to read unless I make my terminal or Emacs huge and it makes diffs cryptic when one has to compare two 200 character lines to figure out a change. For someone who would like to look into the code those things make a real difference and should not be neglected because it is “just cosmetics”.
Mixed XHTML and PHP code. The themes in WordPress use no page template system what so ever, they just output the raw XHTML to the user — making it easy to create invalid XHTML output.
To defend this choice, then I must say that I’ve never been impressed by template systems like Smarty which claims to separate the application code from the presentation. To do this they give you a template language in which you can program your pages — if you look more closely at it, then this template language ends up being simply a reimplementation of the original language. So instead of
if ($foo || $bar) ...
you write{if $foo or $bar} ...
. Has this bought you anything, except requiring you to learn another language with its possible quirks and limitations?If that was what the WordPress developers asked themselves, then I can understand why they simply went with normal PHP code mixed with XHTML. But it can be done better than that: PhpWiki uses a cool system where all the XHTML code is generated using a set of classes and functions. Using such a high-level interface automatically makes the produced XHTML code compliant and it makes the source so much cleaner. With some proper caching the performance shouldn’t be affected, but the long term quality of WordPress would improve.
I hope that the WordPress developers take steps to fix and improve some of the things I’ve described above. Apparently, there are others who agree with me about the quality of the WordPress code. Despite my complains, I’ll keep using it, for even though I can find lots of things to complain about, I still think it’s the best software for what it does.