Back in 2002, I set up this blog on b2. A year later, b2 updates had stagnated, I migrated it to a fork of b2 called WordPress.
In the intervening 21 years, WordPress has gone on to power a huge fraction of the web. But in my opinion the project has lost its way, starting with the move to the Gutenberg block editor in 2018 and trying to become everything to everyone instead of just really good blogging software.
In response to the Block Editor merge, another project forked WordPress to create ClassicPress. Initially it was more or less WordPress Minus Gutenberg, but they’ve continued to do their own development as well, from cleaning up old complex code to improving the way media management works. I sorta kept up with it for a while, but finally decided to really evaluate it this month, and it’s actually really good! So I migrated a couple of test blogs, then Katie’s Feral Tomatoes.
Then I started looking at what it would take to migrate this 22-year-old, 3,255-post behemoth of a blog. (And that’s after moving a bunch of posts to other parts of my site, and deleting a bunch of no-longer-useful posts like ‘Migrated from 1.1 to 1.2. Let me know what’s broken.” or “Check out this weird link!” with no commentary (especially when the weird link is long-dead by now anyway).
Extra Motivation
I was going to take it slow. But it turns out that WordPress.org, the host for all the plugins and source code and support forums, is not part of the WordPress Foundation or even Automattic…but Matt Mullenweg’s personal site. No wonder he felt justified in his black-hat SEO experiments back in the day.
With the CEO unilaterally blocking API access to a hosting company, requiring users to disavow that hosting company in order to log into WordPress.org — Have I mentioned lately that I never actually deleted my LiveJournal account because I didn’t want to agree to Russian law after they shifted it over? — telling employees if they don’t like his actions they can leave (admittedly with a decent severance package) various people reporting having gotten legal threats over commenting on the dispute with WP Engine and a whole lot more…
I wanted to drop — or at least drastically reduce — my dependence on Automattic and WordPress.org as soon as I could.
When someone shows you they’re willing to cause a bunch of collateral damage on a whim, assume they’re going to do it again, and next time you might be part of the collateral damage.
I mean seriously, look at this legal document quoted at WP Tavern:
This case is not about Plaintiff’s access to WordPress… this case instead is about WordPress.org – a website owned and run by Defendant Matt Mullenweg individually, for the benefit of the community he loves. WordPress.org is not WordPress. WordPress.org is not Automattic or the WordPress Foundation, and is not controlled by either. To the contrary, as Plaintiff itself acknowledges, WordPress.org is Mr. Mullenweg’s responsibility.
ClassicPress is confident that they’re safe from this sort of shenanigans, as they manage their own code and update infrastructure (though the dashboard does still connect to the WordPress plugin and theme directories), and forking the code is a core right protected by the GPL.
Migrated!
Most of the plugins I was using on here are also compatible with ClassicPress, and the main sticking point was replacing the sitemaps and link preview metadata and such provided by Yoast SEO with a CP-compatible plugin. Classic SEO does all the things I actually use it for.
So I ran the migration. Super-fast, super-easy. And so far it looks like things are working as expected!
I did have to recreate the per-post options I had set via Yoast (a few NOINDEX posts and a few with canonical URLs pointing elsewhere), but I checked ahead of time and there were less than 10 of each, so I didn’t bother working out a SQL statement. Though this one’s a convenient way to find them.
SELECT pm.*, posts.post_title
FROM posts inner join postmeta pm on posts.id=pm.post_id
where pm.meta_key like '_yoast_%'
and pm.meta_key not in (
'_yoast_wpseo_primary_category',
'_yoast_wpseo_estimated-reading-time-minutes',
'_yoast_wpseo_content_score',
'_yoast_wpseo_focuskw',
'_yoast_wpseo_focuskw_text_input',
'_yoast_wpseo_is_cornerstone',
'_yoast_wpseo_linkdex',
'_yoast_wpseo_wordproof_timestamp'
)
ORDER BY pm.meta_key ASC;
I am still using some plugins maintained by Automattic. WP Super Cache has been one of my must-haves for ages, and it works fine in ClassicPress. And the ActivityPub plugin is supposed to be compatible too, something I’ll be able to confirm when I publish this. But I finally ditched Jetpack last spring when it turned out they were selling Tumblr and WP.com user data for AI training earlier this year, and settled on Antispam Bee to replace Akismet.
@kelson Yep, the ActivityPub plugin does still federate on ClassicPress!