I’m about one month late on this, but David Bushell wrote about his complaints with WordPress last month, and I wanted to voice my extreme agreement.
Some choice quotes from what he said about current WordPress theme development:
There is no real PHP here.
Wordpress is supposed to be PHP, right? I feel like the development community has lost its mind in its complete and total rejection of working languages like PHP in favour of NextJS and Gatsby and whatever other garbage is in favour these days. It’s a shame to see WordPress pursuing similar pathways.
Back to David:
If you’re curious about HTML-JSON and why it exists read my article on the WordPress Gutenberg problem. TL;DR it’s a monumental hack. Originally it was generated by React. Now it’s spread to templates and meant to be coded by humans. I think. Code editors aren’t sure how to handle it.
I completely agree with this. But to be clear, WordPress was advertised for many, many years as “the CMS for hackers.” It shouldn’t be a surprise that hackers are now a part of the institution, and they’re making it more and more of a hack.
That sounds like a joke, but really, WordPress is just a big ball of spaghetti now. That was a running joke for years, but thanks to Gutenberg, it’s more true than ever.
Here’s an example (also from David’s post, but it’s a good one): users can customize their theme settings from the backend. That in itself isn’t bad, but their edits get saved as customized templates in the database, instead of getting reflected in code.
That’s all well and good if you’re just making a little personal website, but if you’re a client of mine, what happens if you want me to change the header you’ve already customized?
David elaborates:
So as a developer, what if you’re asked to change the header template? What happens if you edit parts/header.html? crickets — that file is not a real template. It’s just a placeholder or reference that may be copied into the database. Once it is, it’s game over.
So how are you supposed to edit templates consistently?
That’s the neat thing, you don’t!
And this is just the tip of the iceberg. I agree with David: modern theme development on WordPress is terrible for developers, and almost as bad for clients.
Thankfully, you can build things on WordPress “the old way,” but since Gutenberg debuted in 2018, “the old way” is constantly under threat of getting deprecated. So why would you want to build that way?
Here’s my take: I’ve taken almost every client I’ve worked with since 2017 and moved them off WordPress. I’m working on a project right now that was supposed to be in WordPress, but when I explained even a small bit of my apprehension to the client, he explained he doesn’t even want to be on WordPress anymore, and he wants off too.
WordPress is the default for the internet, but it’s a giant mess at this point. Imagine you’ve bought a house. You’re excited to move all your things in.
Shortly after moving day, you discover things are not what they seem: plumbers tell you the pipes don’t follow any logical flow. The walls are sometimes drywall, sometimes plaster, and sometimes wood panelling, often in the same room. The basement constantly floods. Every time you try and make any updates or modifications, you discover several other problems, and your home is in constant flux. You live in a project.
You’ve moved all your furniture into one room — the only safe room — near your front door. There’s a big window looking out to your neighbourhood, and anybody can peer inside at your stuff. The blinds in that room don’t work, the screws holding in your front door’s deadlock have threaded, and you didn’t know it at first, but your police officer friend just told you that your neighbourhood has a high crime rate.
Well… That’s basically how I think of WordPress these days. A big old ball of spaghetti that will ruin your life.
I heartily recommend Craft CMS to my clients instead, or sometimes Kirby CMS. There are lots of other great options out there if neither of those are to my client’s liking, but you can really do better than everybody else’s bad default.