Here at Purple, Rock, Scissors, we frequently get projects which are heavy in custom development–whether it be a social network, news syndication website or a complex content management system. Not everything we do is custom, though, which is important because rolling your own is not always the most cost effective solution. Frequently, developers like to live free and reinvent the wheel; commonly known as the "Not invented here" syndrome.
For our web site we had a few, simple goals: Display our work, make it look amazing and communicate we’re a company of individuals who are passionate about what we do. Initially, we looked at a few different options: custom using Zend Framework, Drupal, WordPress or my secret love affair: Django. In the end, I chose to run with WordPress MU:
WordPress MU, or multi-user, is designed to do exactly that. It is most famously used for WordPress.com where it serves tens of millions of hits on hundreds of thousands of blogs each day. – http://mu.wordpress.org
Perfect! So we have the ability to create simple pages and blogs. What about making everything editable in our design so that someone with the likes of Aaron Harvey can update the site? Well, for that we had to make WordPress do a few backflips. How? Plugins: where WordPress really gets it’s power! It’s important to us that we can fully maintain the website while keeping WordPress’ code integrity when updates are released. The plugins we use for the site are:
- All in One SEO Pack
- Contact Form 7
- Socialable
- WP-Facebook Connect
- PageMash
- Purple Team Profile
- Purple Pages
- Purple Live Search
- Purple Mu Search
Ideally, we’d have loved to find everything we needed available from the community; but we had some special requirements.
Purple Team Profile
This plugin which powers each Team Member profile. Our profile descriptions, company positions, money shots and web services are all controlled through this plugin which hooks directly into the current User Profile system offered by WordPress. Being the Zend Framework fanboy that I am and not being pleased with current web service plugins offered by the community, I leveraged Zend_Service and Zend_Rest to power our Twitter, Flickr and Last.fm feeds which are then cached by Zend_Cache. At the end of the day, it provides a simple way for anyone to modify what and how their information is displayed.
Purple Pages
Many of our page designs do not lend themselves well to a single content editor. The plugin uses a myriad of WordPress function extensions to enhance the content publishing functionality of the CMS. Content nodes are defined by privately-published subpages with flexible page title naming conventions for placement, type and ordering. Ultimately, the goal was to provide a non-destructive, flexible and low-cost solution which it provides with flying colors.
Purple Live Search
Our handy Ajax search functionality. The WordPress community already has an armada of plugins that do this; but using Javascript libraries like scriptaculous which we have no desire in using. Going back to the whole, "Not invented here," syndrome–credit needs to go where its due. I based this plugin off of Live Search Popup. I found that about half of the PHP codebase was unnecessary (which was sliced out) and made it work with jQuery.
Purple Mu Search
Lastly, we wanted our search to hit all of our Mu installations. To my surprise, there wasn’t a WordPress MU 2.7 plugin that fulfilled this functionality so I worked off of the concepts done in GT Search All Blogs. I wasn’t a particular fan of locking the plugin into just this use case, so I refactored it up to PHP5 and created overloadable decorators to output results in any fashion deemed necessary. The same functionality powers both the Purple Live Search as well as standard search.
Done!
The end result is as you see it now and the total PHP development time was just over one week. Open source projects win again and the day was saved (for cheap). We plan on releasing our plugins down the road when we’ve used it in some of our client projects and make them more flexible for other use cases.