What I learned from transferring my blog from WordPress to Orchard

DZone 's Guide to

What I learned from transferring my blog from WordPress to Orchard

· ·
Free Resource

It was a decision I was thinking about for quite a while now. Besides the fact that I am working mostly in the context of the .NET ecosystem, WordPress started to act up a bit lately. After contacting GoDaddy and them refusing to take any actions, blaming it either on the theme used (false: changed themes multiple times, still the same performance problems) or the fact that I was running WordPress in a Windows environment, I decided that it is time to take my experiment to the next level and actually switch to Orchard, being both closer to the platform and easier for me to dig around and customize.

First and foremost, I must say that it is a pain, no matter how you look at it. Moving a blog from one platform to another, especially if those two are not cross-compatible, brings up a lot of nuances that you could spend some time on. By default, WordPress exports data in its own format - eXtended RSS. Unlike BlogML, xRSS is not accepted by Orchard as a valid content import format, and therefore you have two options - either use a xRSS-to-BlogML converter (Richard McLaws actually created a tool that does it) or rely on XSLT transforms.

The conversion failed for me - for some reason, the tool I am talking about started crashing whenever it reached CDATA points (where I had XML code snippets). So this option fell through. XSLT transforms weren't of much use either, so I had to manually select the necessary blog posts and import them in my Orchard installation. This implied that I am still keeping the correct paths for media content (that is stored by WordPress).

This caused its own set of problems - I am losing all my tags and comments. I am also losing the content references, since the URL rewriting mechanism in Orchard is a bit different compared to what I used in my WordPress set up. I can always get it pretty close to the original, but in my case I decided to separate the blog from the main site, so I added a /blog/ partition to the URL - all references to previously published content will become broken the moment I do the final switch.

So here are the important points that I would like to highlight:

1. You don't necessarily need to dump the SQL data (as many believe) to move content from one blog to another. Check for existing plugins and built-in tools that can help you export the content in a portable format.

2. If you are moving content between two completely different platforms, be prepared to do a lot of work on that content, especially if it is not exported in a commonly recognized format, like BlogML.

3. Chances are you will lose references to old content (from other blogs/articles) since the URL handling might be different. Be prepared to lose traffic because of this.

4. Theming generally remains fairly easy - digging through core CSS and HTML shouldn't be that big of a problem, so it should be the least of your concerns.

5. Be prepared for exceptional situations. For example, after installing a plugin the whole new blog installation might become trash. Do not delete the old content right away - make sure that the new installation works 100%.

6. Familiarize yourself with the new environment before trying to configure it. That being said, Orchard has the concept of multiple blogs being present on one site. If you click on "Remove Blog", it will actually destroy all associated content without the possibility of recovering it (unless you backed it up).

7. DO NOT, I repeat - DO NOT try to jam two blog content databases in one, relying on table prefixes. This creates major problems in the long run, both security and integrity-wise. This can turn out to be a really bad decision.

8. Be prepared to spend some time. More than you expect.

9. BONUS: You will most likely have to re-set your analytics system (e.g. Google Analytics) in order to track content from the new location.


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}