With the advent of WordPress 3.0 (and 3.1), I’ve seen a shift in how web developers are treating what was once exclusively a blogging platform. More and more, it is being used as an easy, quick, and highly flexible CMS (content management system) in addition to just a blog. In fact, you can just as easily use WordPress as a CMS for websites and leave the blog part out entirely if you want.
This hasn’t always been the case, and WordPress still is not a complete be-all and end-all solution. But with each release (we are at 3.1 at the time of this writing, the 6th iteration of the 3.x version), WordPress becomes more and more of an option for website development for any purpose.
This isn’t necessarily an article on WordPress 3.0, but more of a comment on the current state of what makes WordPress so appealing to me.
The High Points of WordPress
I’m fairly new on the WordPress development scene. I first began playing with it as a blogging platform in mid 2006, long before it would ever be considered capable of being the content management system for an entire website. It has only been since the mid-2010 release of the 3.0 platform that I really began to dive into what WordPress can do and how it changing the way websites can be built.
The Custom Menu System
The biggest advancement in WordPress 3.x is the custom menu system. This was the single addition that took WordPress from a blogging platform you could hack into website, into a actual CMS that could be tuned to serve as a primary content platform. No longer did you have to rely on categories and pages to organize your navigation and content. You could now organize your menus and navigation in any way you wish, giving you the chance to structure your website just as you would any other. Pages could easily be dragged around into subpage hierarchies, custom URL links could be inserted as menu items, you could link to pages, categories, taxonomies, and any other custom part of your site you wanted. Each menu item could also have a unique class appended to the existing class system, so the possibilities were nearly endless.
At first, many themes didn’t support this menu system. The WordPress core functionality was there, but the theme had to have the WP 3.0 custom menu options in place already. Theme authors were quick to catch up, and now almost every decent theme has the ability to use the custom menu system. Some themes even have multiple areas for multiple menus, in case you want a primary navigation, secondary navigation, a special header or footer navigation, and there is even a standard widget which you can use with any theme to display a custom built menu.
What this did was change WordPress from a system subordinate to blog postings and a category system, to an open ended CMS that could very quickly be tailored to serve double duty as a blogging platform, and your entire website itself.
Theme Customization, Integration, and The Power of CSS
WordPress has a fairly intuitive theme hierarchy system. This gives developers the ability to take parent themes, and easily spin off child themes, often using only CSS to make the changes. But in the case that you do want to have a part of your child theme take precedence over the parent, the WordPress system is set up so a file in the child theme will supersede the identically named file in the parent theme.
This may not make alot of sense if you’re not building themes, parent or child. But when it comes to rapidly building up a website and using existing frameworks and parent themes, it becomes a increasingly powerful tool for designers. There are many parent themes and frameworks to choose from, I personally use the ThemeHybrid collection of parent themes and core frameworks. ThemeHybrid is a site by theme designer and WordPress guru Justin Tadlock, and the parent themes and frameworks he has developed are very advanced and easy to work with. Most of the time, the themes don’t come with a certain style or design – that’s for the developer to choose and customize themselves. That is the power of framework based parent themes, they give you a tremendous starting point for which to begin building your site.
Combining the smart theme frameworks with the knowledge of how CSS works, you’re able to do almost anything you want. Cascade, specificity, and inheritance allow you to customize away at any parent or child theme you choose, being able to tweak, replace, overwrite, remove or change any part of the existing layout. There are lots of articles on how CSS elements are weighted (inline, class, ID, element, etc etc), so I don’t need to go into that here. The important part is that when you’re working with a good theme, much of how the CSS will be used is planned ahead of time. From there, you just start whittling from the outside in, and can use the power of CSS to mold the design in any way you see fit.
In addition to modifying the parent themes through CSS and theme hierarchy, there is also a rich playground based in two separate ways to modify your theme: through the get_template_part function, and the custom page types.
What get_template_part does is basically serve as a WordPress system of includes, much like <?php include()?> does, only the get_template_part works on a them heirarchy level, meaning that the file which you are including can exist in the parent or the child theme, and it will be called intuitively regardless of where you are in the directory structure or in a rewritten url with lots of “pretend” directories like “blog/category/birds/raptors/” and such. This allows you to build in chunks of code that you can use as needed throughout your theme template, and WordPress intuitively knows how to handle them. This gets around some of the incompatibilities of using the standard <?php include()?> in a system of various file depths and locations.
The other feature that really expands your customization are the custom page types. These are basically page templates that you build to your needs, and apply them on a page-by-page basis to your WordPress pages. This typically involves things like custom layouts or custom code that you only want to run on one page. Say you wanted a page to not have any sidebars, and the content to stretch the full width. One simple way of doing this would be to take the page.php out of your parent theme, and make a copy of it in the child them, and rename it to what you want, for this example we’ll go with page_one_column.php. You can then edit this page, remove the sidebar from the code, and set the CSS to expand the content area the full width. Then, you give the file a WordPress readable name in the file comments, Template Name: Full Column and apply that page template to whichever page you want it to use.
This can allow you to build each page with a unique layout and style, as customized as you wish. By using the page template and get_template_part system, you can add just about anything to any theme, and WordPress will recognized and treat those additions like part of the core working theme and template. Instead of trying to work outside of the WordPress core, these can allow you to work within it and increase the reliability and compatibility of the site your are building.
Extensions and Plugins
User Editable Content
Of course, the basis of a CMS is to have non-developers being able to add and edit their own content. This is probably the biggest reason WordPress is chosen in many of the cases where it stands in place of a static html/css/php website. The site owners or content generators can easy add their own posts, pages, menu items, SEO keywords, widgets, and various other site setting without having to know any html or advanced coding knowledge. This is typically what attracts people the most – the power to control their own website content without having to rely fully on a website designer.
The Low Points of WordPress
I wish I could say that WordPress is 100% foolproof and solid. It’s not. Part of that has to do with the nature of open-source software, and part of it has to do with the near-infinite learning curve of mastering WordPress on a custom development level. While the good definitely outweighs the bad, there are things that people, myself included, consistently run into.
PHP Errors and Lack of Knowledge
WordPress is a PHP beast. It’s loaded with thousand and thousands of lines of PHP code, and has been developed over the course of many years. While basic theme customization and html/css styling can be picked up pretty fast, the guts of this CMS are fairly intricate. Often, you can find yourself painted into a corner where you know enough to get to a certain point, but then realize that your knowledge of PHP as a programming language has run out. You’re then stuck scratching your head and going to the forums for help because you’re using a tool that is beyond the scope of your experience. This can be very frustrating when the whole system is designed to be able to function “code free” if you want, but as your desire to customize and extend grows, you will reach a point where if you’re not a pretty savvy PHP programmer, you will run out of options. That’s just the name of the game, it’s a constant learning cycle. Often you can find yourself staring at some sort of bug or error that isn’t necessarily 100% a WordPress error, but is more of a PHP error based out of the WordPress code, which is itself just PHP. You might be a great graphic artist, or pretty familiar with html/css, or even gotten your hands dirty with theme customization. But once you are in the meta-spehere of WordPress as a giant PHP script, you may find yourself quite lost. That’s when it’s time to head over to the forums, or go where I go, to the ThemeHybrid forums.
mySQL Errors and Lack of Knowledge.
The same things can be said about running a mySQL database driven application as can be said above about running a PHP based application. If you aren’t familiar with mySQL databases, how they work, why they work, and why they sometimes don’t work, you’re going to give yourself a few headaches. It’s a complex system, and WordPress relies 100% on the mySQL database system. I’m no database wizard myself, so often I’m sent to the forums or to books to look for other people who have had the same problem I am having. The same with PHP errors, if you are having database problems are aren’t familiar with mySQL and how it works, you’ll be back to scratching your head wondeing why something that is billed as such a simple CMS is giving you so many problems. Don’t worry, you’re not alone. Most people who build WordPress sites are neither PHP experts, or mySQL experts. The ones who are… well they’re the guys who are developing the really cool themes and plugins.
Out of everything that makes WordPress unpleasant to use, lack of knowledge about PHP, mySQL, and how WordPress utilizes them both is probably the source of 90% of the major problems people run in to. It’s just part of the beast, giving people the tools to do things when knowledge of how the tools are built isn’t required. There are thousands of WordPress blogs and sites that are set up and running and haven’t had a hiccup in years. And then there are ambitious designers who set out to do something unique and custom, and realize they run into a wall when it comes to the development.
Updates – WordPress Core, Themes, Plugins
This one will bite everyone in the ass someday. This is an open-source project, so not everyone keeps up with their themes and plugins. You may find that WordPress one day updates from 3.1.2 to 3.1.3 and that certain plugin you loved has stopped working, or doesn’t work as it should, or throws a fatal PHP error and leaves you nothing but an inaccessible blog where you have to fix it via FTP and the database itself.
This is something that just can’t be avoided. WordPress, and open source environments, are meant to be owned and controlled by everyone, which means that there’s no real guarantee that a certain theme or plugin or WordPress itself will always be 100% compatible. In fact, the recent 3.0.5 to 3.1 update for WordPress threw many a theme and plugin out of whack. Good developers who update their themes and plugins were already prepared for this and had updated their code ahead of time (and pushed the update notice to your WordPress backend), but many plugins and themes are never updated, and if there comes a time when something is no longer compatible, it has to be abandonded, or you can try and fix it yourself (see the “PHP Knowledge” quandary a few paragraphs up). This is one of the main things that keep people from using WordPress in large, important enterprise environments. You can’t rely on some plugin for your site that was developed by a 16 year old, and while it worked great for you with WordPress 2.8, it’s completely unusable when WordPress 3.0 was released. What do you do then?
Large Scale Custom PHP and Database Addons
If you’re needing to add some serious PHP or database applications, even going so far as developing web based apps, this is where you essentially are going to rely on a development solution independent from WordPress. While there are ways to integrate large scale database driven projects into WordPress, you really will need to know what you’re doing. It is at this point that most companies and projects either move to a more enterprise (and possible not free) CMS solution, or build their project from the ground up. If you’re at this point, you probably already have the development resources regarding programming and database work anyways, at which point you may be offered alot more freedom from going homegrown.
WordPress – It’s still a winner to me.
After all that being said, I’m still a pretty big fan of WordPress. It allows for a pretty huge range of options that typically require a great deal of work and development if done in a stand-alone environment. In my past/present/future line of work, typically the projects are of a small/medium business nature, and WordPress is perfect for those applications. Many past and present clients of mine have no development arm of their comany, and they are relying on one-time consultants and contractors to get their sites up and running, and then from there they intend to manage it themselves.
WordPress is perfect for many applications, and not perfect for others. It’s really up to the project manager, site developer, or company manager to decide which route they want to go with.