Recently at meltmedia, I had to port a blog for one of our clients from WordPress.com to a self-hosted WordPress.org install. Normally, most of the work I do is with Java, JBoss, OSGi and technologies of that sort, so working with WordPress and PHP was quite a new experience for me. At first, the thought of porting a WordPress.com blog to a self-hosted WordPress.org solution seemed like a simple matter, but it ended up being more involved than I expected.
Our client used a number WordPress.com features not available in a vanilla WordPress.org install, namely: social network sharing for posts, publicizing tools for Twitter and Facebook (among others), slideshows, email subscriptions, site stats, short links, embedded video shortcodes, a Twitter feed widget, and special support for mobile clients. WordPress.com provides some of these features through equivalent plugins for WordPress.org, others are just 3rd party plugins, and some are proprietary with no directly equivalent WordPress.org counterpart.
I originally installed the Sharedaddy, WordPress.com Stats, and Wickett Twitter Widget plugins to provide the social networking for posts, stats, and twitter widget functionality respectively, but later on switched to using WordPress.com’s Jetpack plugin (released while I was working on the port) which provides the same features as well as shortcodes for embedded videos and short links. Jetpack proves satisfactory in most respects, though it does have the drawback of requiring a WordPress.com account (not a big deal since the client already had one) and the plugin also requires that any WordPress.org instance using it be on a publicly accessible domain, which is problematic for development where I prefer to work (as I assume most developers do) on my localhost. Unfortunately, while JetPack does fill a number of gaps, there are still some proprietary features of WordPress.com for which it does not provide support, slideshows in particular.
WordPress.com has this nice feature where if you put a
[slideshow] shortcode in a post’s content, it will be replaced by an animated slideshow of the images attached to the post. To my knowledge, WordPress.com provides no plugin for this feature, though they stated in a blog post from over a year ago that such a plugin would soon be available. Sadly, despite my best efforts, I could not find a suitable plugin to provide the same functionality. While there is certainly no shortage of slideshow plugins for WordPress.org, each of them seems to have one shortcoming or another. For example, NextGEN Gallery provides, among many other great features, support for in post slideshows, but it was incompatible with the WPtouch plugin that I also needed, and it doesn’t simply use the images attached to the post, but requires a set of images to be uploaded and grouped together separately from the post. Arguably, this latter issue is less of a shortcoming than a more appropriate and flexible way to manage the relavent data, but I wanted to make the change of hosts as transparent as possible to the client, and requiring them to manage such information elsewhere seemed too disruptive to their existing work flow. I also looked into Slideshow Gallery, and a number of its derivatives, but they had poor support for images of varying sizes and also proved similarly difficult to get working with the WPtouch plugin. In the end, I was unable to find a replacement for the slideshow feature, though I’m hoping a future version of Jetpack will include such support. I’ve been toying with the idea of creating my own replacement, the WordPress.com slideshow is essentially just a wrapper for the jQuery cycle plugin, but time being the rare commodity it is, I’ve yet to get around to it.
Email subscriptions is another area where no directly equivalent plugin exists. I ended up electing to use MailPress to fulfill this requirement, which is overkill for the task, user subscription for notification by email of new posts and comments on the site, but it works. Transferring existing subscriptions over proved relatively simple. A subscriber list CSV export can be acquired through the WordPress.com admin interface (it’s located, somewhat confusingly, in the stats section), and MailPress has a subscriber import tool which can import the data. The only issue was that MailPress didn’t like that the CSV file generated by WordPress.com had only a single column, but its complaints were silenced by simply adding a comma to the end of each line in the CSV.
The mobile optimized support that WordPress.com offers comes from the WPtouch Pro plugin that I eluded to earlier. Out of the box, it’s pretty much configured in the same way it is on WordPress.com, so it took little effort to get it working. I do have some issues with the plugin itself, but none relavent to someone who simply wants to port a blog from WordPress.com to a WordPress.org install.
Porting the data itself from WordPress.com to the new WordPress.org instance was for the most part painless. WordPress comes with a built in export tool that allows for the export of all post data (including custom post types) from a WordPress install, and this export can be easily imported into a WordPress.org install using the WordPress Importer plugin. However, there isn’t any mechanism to transfer theme, site, and plugin configuration from WordPress.com, so this ends up being a manual process filled with tedium and potential for error. I wrote a script to configure most of this for me during development, but there isn’t a good way, that I’m aware of, to automate the entire ordeal. To redirect users from the WordPress.com blog to the new WordPress.org instance, the client purchase WordPress.com’s site redirect upgrade. Unfortunately, it’s not free costing $12.00 per year, but it does work.
In the end, the blog migration from WordPress.com to a self-hosted WordPress.org site was a success, albeit not quite the smooth transition I’d hoped for. The only feature missed from WordPress.com was it’s slideshow support, but I imagine with some additional effort that issue could be addressed. For those looking into porting a WordPress.com blog themselves, here are the plugins I ended up using: Jetpack, MailPress, Akismet, WPtouch Pro, and Simple Twitter Connect with the STC – Publish add-on.