John Trimble

Tinkerer, Problem Solver, Software Engineer

Migrating From to

Recently at meltmedia, I had to port a blog for one of our clients from to a self-hosted 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 blog to a self-hosted solution seemed like a simple matter, but it ended up being more involved than I expected.

Our client used a number features not available in a vanilla 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. provides some of these features through equivalent plugins for, others are just 3rd party plugins, and some are proprietary with no directly equivalent counterpart.

I originally installed the Sharedaddy, 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’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 account (not a big deal since the client already had one) and the plugin also requires that any 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 for which it does not provide support, slideshows in particular. 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, 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, 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 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 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 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 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, 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 to a install.

Porting the data itself from to the new 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 install using the WordPress Importer plugin. However, there isn’t any mechanism to transfer theme, site, and plugin configuration from, 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 blog to the new instance, the client purchase’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 to a self-hosted site was a success, albeit not quite the smooth transition I’d hoped for. The only feature missed from was it’s slideshow support, but I imagine with some additional effort that issue could be addressed. For those looking into porting a 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.