A lot has been written about the niceties of WordPress and its capabilities; its tweaks and extending its limits. Particularly Lorelle On WordPress site and the post websites pushing wordpress beyond its limits points to very good stuff.
Nevertheless, as a software engineer I will analyse it from a different perspective – for more industry use than individual use. Blogging is not personal any more, the industry has accepted it as an effective form of broadcasting, marketing and community development, hence this effort.
WordPress is a kind of tool that gives you instant conviction, both as a user and developer. To be able to setup your website quickly and also see a UI for managing it makes you feel powerful. This concept is applied in lots of tools to create Content Management Systems. The idea is to control entire lifecycle of the content using a single platform. Where most of these tools differ today is the flexibility and performance that they provide. Some of them are built for specific purposes or with certain ideologies. I will consider WordPress as a CMS tool specific to blogging.
WordPress supports the CMS concepts and the latest standards in it. It lets you design your website using pure XHTML and CSS. The correct use of this can enable you to have tableless designs and save a lot of bandwidth. In addition to this, it also allows separation between the layout and colours/styles of the design. At the core, it has an innovative design of a loop that provides context to all the operations within it. This eases the task for a developer. Lets look at some features:
Multiple heirarchical categories
This feature gives complete freedom to the information architect to do content classification as required, without thinking of technical possibilities.
Custom fields in the posts
This empowers the user to add more elements to the structure of the post. This is a pretty neat feature as it can be used to wrap the post as some other data type, without having to create any separate storage for it.
Plugin API, Hooks, Filters and Overridable Functions
Wordpress provides a plugin API to add functionalities to your blog. The hooks enable modification of the behaviour or optimisation at certain events, e.g, the wp_head hook gives a chance to do optimum Search Engine Optimisation. Filters are used to transform data between the point of retrieval and delivery. These features let the developer modify behaviour of the blog without hacking into the WordPress code.
This idea is very impressive, but not satisfactory. The plugin API does not enforce any rules on the developer through the design. I see the reason behind this as non-Object Oriented implementation in lots of places. The purpose of a common system for all the plugins can be two-fold, one is it will ease plugin development and two it will make the upgrades much easier. Now with PHP5, WordPress should definitely try to achieve more here.
WordPress does not provide lot of control to the developer over the retrieval of data. The user can use filters only after the data is available. A disadvantage of this approach is that some unnecessary data might also be requested which will not only increase the time of retrieval but also affect the memory and increase processing. For example, if a category or post has to be hidden, the developer has to use filters to hide. This can be avoided only if the developer writes his own SQL query and starts a loop. But this will mean that the developer will have to be exposed to the database design, which might change in future. The plugin API should hide the plugin developers from these internals and provide an uniform interface. I attribute this to embedded SQL queries. Which can be modified only to a certain extent at runtime. WordPress should provide such control to the developer so that his/her actions can dictate formation of the entire SQL query.
An idea case would be that WordPress starts using stored procedures, MySQL 5.0 supports them. Stored procedures are compiled in the database and are effective in increasing performance.
Separation Of Concerns
Wordpress, through its support of XHTML templates and CSS, allows separation of data and display, i.e., the formatting of the data can be completely different from the storage, retrieval and processing itself.
The templates themselves are PHP files which can help quick development, but it also poses a danger of co-existence of code for retrieval, processing and layout of data. There is no physical separation between them. WordPress can use something like Smarty to differentiate in the design itself. This is a subjective thing, it makes the development more complex for smaller projects, but it will definitely help in bigger projects (like WordPressMU) and where bigger teams involved.
Wordpress has search that is partly effective. It does not search through everything, there are some plugins to this effect, but they will never be as effective as WordPress supporting it by design. The search does not show relevance or highlights of searched keywords. It needs a strong search enging that can index the data and provide better search performance. One of the outstanding open source search engines available today is Apache Lucene.
Since WordPress is a blogging tool, it supports the data type of a post (or entry). It also has other data types like categories, links, users, etc. Like mentioned earlier, the post can be disguised as another data type by using its custom fields. This is the only element that supports creation of new data types. There is no common framework to create or handle the datatypes. This means that when I add my own data type, everything has to be done from scratch. This can not only be cumbersome but also dangerously erroneous. Having a framework for this will also help WordPress in controling lifecycles of the different data.
The option of custom fields can be used to only add to the post, but it will not help to create a data type for images or newsletters. This can also help to build bridges between WordPress and other applications.
Currently a very simple workflow is provided for controlling publishing of a post. But there is no way of building other workflow events or rules into it. There should be a workflow engine to support this so that it can be used in diversified environments.
The support for syndication is nice and full-fledged. With more and more plugins adding functionalities, syndication is getting richer and richer.
There is support for multiple users in in WordPressMU, but it is still not part of the main package. Support for multiple blogs requires good central administration, and more granular permissioning for assigning administrator per blog.
WordPress is still one of the best tools available for blogging, the best for me. I firmly believe that its core design and development is a reason for this, and it has to be continuously enhanced to meet newer challenges in blogging.
Technorati tags: wordpress, review, wordpressmu, plugins, plugin+api, sql, mysql, cms, content+management+system, workflow, search, data+type, blog, stored+procedures, lucene, syndication, xhtml, css, hooks, filters, programming
Copyright Abhijit Nadgouda.