It's an horrible peace of software, with horrible PHP code 4.x style, a db schema only a beginner could have come up with and an ecosystem with a lot of trash(not even talking about the admin which is hideous ). Yet it's a blazing success in the CMS space, because of 3 things that are insanely overlooked by other CMS developers :
- Ease of installation
- It runs on a minimal PHP/Apache/Mysql setup (cheap hosting)
- It has a great backward compatibly, unlike other solutions that break everything with each major version.
If one compares with Drupal for instance, I mean with Drupal, a designer can go really really far without writing a single line of PHP code, aside from a few tags for templates(but it's really light). You have views, CCK and a lot of handy stuff.
On the other hand, one cannot customize Wordpress without writing more than a few php tags or downloading a plugin that will mess up with the original db schema. And good luck customizing the admin(easily done with Drupal).
I get that Wordpress is more of a "platform" businesses can build products upon, but who would really want to build on that shitty core,with that db schema? one can say i'm negative and unfair in my criticism, but I think my arguments are valid.
It's true however that while Wordpress gets a lot of heat from PHP devs, there is no effort from the PHP community to build something like Wordpress with a better codebase, and a better db schema. So Wordpress still has a reason to exist.
Next, you mention:
> Yet it's a blazing success in the CMS space, because of 3 things that are insanely overlooked by other CMS developers :
- Ease of installation
- It runs on a minimal PHP/Apache/Mysql setup (cheap hosting)
- It has a great backward compatibly, unlike other solutions that break everything with each major version.
The actual, true and documented reason that WordPress has become a blazing success in the CMS space is the ease of use of the backend administration console. This comes from developer and client feedback in poll after poll of WordPress users and developers.
> If one compares with Drupal for instance, I mean with Drupal, a designer can go really really far without writing a single line of PHP code, aside from a few tags for templates(but it's really light). You have views, CCK and a lot of handy stuff.
I've heard Drupal developers themselves actually look to WordPress's method of having the option of handling these things in code/configuration as a net positive. It's trackable and portable.
I've got to ask. If a builder of websites was looking for something that wasn't horrible and built by smart people, which one would that be?
Wordpress is easy to use. With plugins, such as advanced custom fields, you can do even more. I've impressed many clients with how easy to use the "website's CMS" in turn around times they have never experienced before.
The code is shocking. The plugin architecture is, well, not really designed at all. Theme design the same. It's just impossible to match it with the number of extensions, the ease of use and my development speed as a result.
It's almost precisely because there's very little uniformity between anything.
It's often much more efficient to just install a new wordpress, migrate some content over and start 'fresh' than it is to modify an existing theme with new functionality; just find a different theme that does what you want and migrate your content and images over to that.
That said, I seem to remember drupal's CCK impressing me some time ago - if that was a default option (IIRC at the time it was a separate plugin) that might have done more for Drupal's "configurability ease" story early on. But.. I may be misremembering with rose-colored glasses.
Because it's so customizable, it's admin interface is too complex for many users. It has to be to be as customizable as it is. And to get a site going you often need to do a whole bunch of work up-front: configuring views, creating content types, taxonomies, rules, workflows, etc. This is often not needed with Wordpress because you just pick a theme, dump in a few plugins if necessary, and it 'works'.
On the other hand, if you really do need all that customization, you're often better off with a proper framework like Ruby on Rails. You can build features in code rather than clicking around the CCK/Fields/Views interfaces, and keep them and other configuration in version control. Most importantly, if you're capable of building complex views and workflows in Drupal, you probably have the ability to do so in code as well. And the latter is generally better in every way if you are capable of it.
Drupal strikes me as the kind of thing that looks good on paper, and that project managers would like, because in theory it can be customized by anyone, and in theory you can build anything you need with it, all without writing code!
In practice, however, you end up paying a lot to get Drupal developers/consultancies to fix whatever mess you're left with. And what do most of these shops do? Use things like the Features module to store everything in code/configuration files, which kind of goes against the whole point of using Drupal in the first place.
The end result is that nobody is really happy, other than perhaps the Drupal consultants who happen to know the ins and outs of the crufty framework/CMS hybrid, and can charge a premium for their knowledge of the dark internals of Drupal.
I hope he doesn't reply NodeJS/Express/Ghost cos the corporate site and blog of Strongloop (main nodejs core contributors and express mantainers) is built with wordpress... And with django and rails core devs we could have another surprise... Who knows...
Looking for one CMS or platform that can fit every kind of website seems strange to me. It'd be sort of like recommending a TV-DVD-DVR combo unit to both your mother who just wants to watch some TV, and to your developer friend who wants a high-performance gaming display.
I've worked primarily with Drupal for the past 8 years. But the clients tend to have very complex needs, including multiple roles and workflows applied to varying content types.
If a client were to come to me and want a blog or a simple brochure site that will be edited by no more than a couple marketing staff, I will tell them Wordpress might be a better option.
The response from our customers (both editors and I.T. teams) has been really positive. For us, Wagtail strikes a nice balance of editor happiness and developer pragmatism.
Since making the move mid-2014, we've implemented Wagtail websites for a bank, an NGO, and some of our private-sector customers. We've built a directory of wagtail websites and developers over at http://madewithwagtail.org/.
It's worth noting that the community is very helpful, and the module ecosystem is growing. There's an API, a static site generator, and a bunch of third-party field types for the editor. Torchbox, Wagtail's developers, are generous with their time and expertise, and we've been able to contribute back to the platform in meaningful ways. A big +1 from me.
As far as WordPress-contenders go, I think OctoberCMS looks very promising. It's dynamic like WordPress, but it natively supports a Git/SVN workflow, so there's less "behind the scenes magic" going on.
Except in very rare cases, I've only found that to be the case for websites I've inherited that were built by someone that didn't know how to build a site in Drupal.
If you've never experienced anything else, of course what you have is always the best.
Secondly, I agree with the OP. In fact I am fairly sure most of HN does because we look at something like Apple where the clear winner is the one who took the time to build the best technology and product together. And yet when we look at poor technology still achieving market dominance we realise something is off kilter - the market signals are not working correctly.
It does matter that the underside of the stone is painted too.
You've answered your own question :-D
When you say WordPress is horrible, what you mean is that it's horrible in terms of various things that matter to you -- things like a clean database schema and freedom from legacy code. But what's most important to you is not necessarily what's most important to everyone else, and it turns out that for lots of people ease of use and simple installation on cheap commodity hosting are much more important than what things look like under the hood.
We as developers tend to forget this a lot -- we look at popular products that are technically funky and think "how on earth can that be popular?" But the answer is usually just a reminder that we're not really representative of the market for software in general; we care about things that nobody else does, and are willing to put up with pain points nobody else would.
I must disagree with these statements. Although it is not the most elegant one I've seen, using the word "horrible" is simply out of place. Have you ever built some sites with it? Do you realize that WordPress is developed in open source with many talented people working on it every day? The DB schema is actually quite flexible, being able to accommodate various kinds of data without many modifications. Apart from that, you can write your own beautiful code according to the newest PHP standards if you want in your WordPress-powered projects. No-one is forcing you to use old versions of PHP.
As far as the success of WP is concerned, I think the reasons for it are very similar to why PHP is successful:
- A huge community with plenty of plugins and themes.
- Supported on basically any hosting service.
- Being free with free updates.
- Refined administration panel with many subtle features like auto-saving posts to Local Storage, which can save your article in case of an accident.
and much more...
I'm not saying that WordPress doesn't have its own issues, however, ignorantly stating that it is "an horrible peace of software" is simply outrageous.
You really can't. Wordpress actively prevents you from writing beautiful, modern code. When writing themes, every template has to be in the root directory of the theme, creating an awful mess. All of wordpress has global variables and/or state in functions that is simply inescapable, making it impossible to write unit tests. Dependency injection is completely out of the question.
If you want to modify some behaviour and someone hasn't thought of putting in a filter for the exact thing you want to modify, it's not a matter of extending a class and overriding a method. Because wordpress is littered with huge god functions with global state, you basically have to copy/paste hundreds of lines of code and make sure that you keep that up-to-date with core updates yourself to prevent future bugs.
Several times I've gone into plugin development thinking "this must be possible without making too much of a mess", thinking I can separate out the unit-testable bits and write a thin WP wrapping layer that deals with the global state. Every time I've been disappointed.
It's not about PHP versions alone. It's that Wordpress was designed in and for PHP 4, and was never modernized. That's an inescapable fact, regardless of which PHP version your server runs.
I personally have no opinion on DB schema because I never looked that deep, but last time I had to deal with WP its codebase was just horrible. And don't get me started on plugins' code quality, it goes to entire other level of "horrible". The project might have a lot of talented contributors, but they seem to be overshadowed by everyone else.
They might have fixed it from the last time I looked of course (though I doubt it, judging by never ending stream of vulnerabilities).
So Drupal, like Oracle, is a consultant's dream. Your clients will have to keep coming back to you because the system is so damn complicated to do really basic things.
After 7 years of full-time Drupal, I'm pretty convinced that it's intended to be a wealth extraction tool first and a CMS tool second.
"You can build a website with no code! Impress and sell your boss on it in a day! Get far enough down the road to not be able to back out and then spend the next several years of your life trying to hire insanely expensive developers to write all the code you need to write to make your moderately complex functionality needs actually come to life."
The tags you need to know to create a basic theme are pretty straightforward, and the market you can reach by learning them is massive: Wordpress is said to power 23% of all websites. If you're a designer who knows HTML and CSS, the learning curve for those templates might be a little bit steeper than for other CMS products, but the number of potential buyers for your theme is dramatically larger.
>It's an horrible peace of software, with horrible PHP code 4.x style, a db schema only a beginner could have come up with
I've been tasked with making Wordpress do things it never should have done, so in service of that I've read a good chunk of the source and I totally agree with this, some of the code is truly abominable.
On the other hand, of everything I've built that has been handed over to clients for content management, Wordpress-backed sites are the clear winners in terms of how much support is required after delivery.
Smart use of custom post types and custom fields, however hideous the code behind them may be, saves time in development, allows you to build an admin that makes sense to non-technical folks, and helps prevent you from re-inventing the wheel for each and every project. It also means that a pretty huge set of developers will be able to pick up your work later on.
If I had to, I would choose Wordpress over Drupal every day.
You can literally setup a decent working website in a day with WP. Want to create pages in WYSIWYG ? Done. Want to manage users ? Done. Wnat to add your social icons ? Oh, there is a plugin for that which is rated by 1000s of other clients. Want to sell stuff ? Np. Add the famous "woocommerce" plugin and you are on your way.
Ok, I made it sound simpler than it can be for users but as developers, it is absolute pleasure when I can setup a client in hours using wordpress and they are on their way.
You can find a theme for $45 that will cost $30K to develop from scratch.
You'll find a few plugins that will do exactly what you want that will cost $50k to develop in-house.
WordPress is great because you have things that will cost you $xx,xxx to develop and they are already available for you at a minuscule cost.
You can get themes for $40-60 that give your site the look of something that would take tens of thousands to develop from scratch.
Why would I want to learn an obscure theming language when I can do my theming in one of the best documented, most used languages for web-development?
Wordpress is a hackers dream. You can open the database and understand what is going on, you can make you site do anything because themes are in php, so even if you don't understand how to write a plugin, you can still hack together the functionality you desire.
The alternatives have been "build-your-own" frameworks with hundreds of libraries but nothing out of the box. When I bring this up, I typically get "but everyone's security needs are different". With WP powering 20%+ of the web right now, that's clearly not true. The dominance of a few oauth systems tied to walled-gardens proves that false even moreso; you, mr senior-enterprise-developer might have extremely-specific use cases (CAS tied to legacy Novell supporting IE5, maybe), but the majority of starter apps need self-registration, email, password, maybe cell token or Facebook registration to get started.
Instead, every single person trying to use almost any major PHP framework has to roll their own security from scratch, which is precisely what we also tell people not to do. I can't tell you how many bizarre hand-rolled security systems I've seen over the years in various PHP frameworks. But hey, they all came bundled with top-of-the-line URL routers and templating libraries...
If you ever see one, in any language, please let me know!
Take the Jetpack plugin for example.
It is a super-great plugin with many features that are good and low on memory in the system.
If you take a look at the Jetpack code you'll see some improvements over there.
It will take time to rewrite the whole wordpress code without breaking chances, but for now I can't praise the WP community enough, and Automattic too, for such easy to use product.
The whole wp.com integration (with automatic upgrades and so on) also makes everything much better.
BTW you can also customize wordpress with no code, but you'll have to use a theme for that (Thesis is a great example, if you want to try it).
Also, yes, Drupal might be better from a code perspect, but I always got the feeling that the whole experience was not as good as wordpress.
HN is a developer-community, so I understand here it's just ok to think about how good the code is, but I don't think we should ignore the whole experience, because in the end that's what pays off.
Wordpress created a seamless experience from installation to use.
Yes, it might be a bit old-style, but it works so beautifully you just enjoy it.
Whenever I got a look at Drupal/Joomla administrations I always feel a bit lost, maybe it's just me, but I believe that is the key difference (together with simplicity and plugins) of the wordpress adoption.
No experience with Genesis/X that's why.
That's not true. Several ex-WordPress developers started the Habari Project to build a modern and clean PHP CMS: http://habariproject.org/en/
It reads like sour grapes, and what's worse is that it has nothing to do with the story itself. I thought the HN mods were actively trying to fix things like this:
I'd say this is one of the main reasons. WordPress has made continued steady progress which is really quite remarkable to maintain.
Drupal on the other hand looks for /sites/$DOMAIN/settings.php, and there's nothing domain-specific in that file (except $base_url, which is optional). Orders of magnitude easier to deal with.
edit: and just discovered the 'guid' column on the posts table is hardcoded as the URL of the post -- the domain you're on at the time you create the content + the post ID. Seems like a nightmare for content staging on a non-prod environment.
It comes up every so often. The WordPress devs are well aware of the platform's warts & WTFs. People have talked for a while about replacing it with a proper UUID, but there are way too many themes & plugins that use the guid field to get the post's URL instead of calling, say, get_permalink( $post_id ).
So now the devs are stuck. You can deprecate "guid", but you can't get rid of it. You can't replace the URL with a UUID because of backwards compatibility with third-party code. Do you add a "uuid" column? Now you have a guid column & a uuid column and people are going to get even more confused.
Right now, content staging is a bit of an edge case and folks who need it are able to store a UUID in a post_meta field. So it's not a really critical issue. But it would definitely be nice to see a proper UUID in core.
Some relevant Trac tickets:
Guids No Longer Have Permalink Format (discusses changing the format)
Non-URL GUIDs are stripped on post update
URLs delivered to the browser should be root-relative https://core.trac.wordpress.org/ticket/17048
WP Development & Production Sites http://lists.automattic.com/pipermail/wp-hackers/2010-Novemb...
Relative vs. Absolute URLs stored in db
1) Users want to be able to update site-name (etc) from the admin interface.
2) We therefore need to store it somewhere.
3) We have a database!
The alternatives are:
- Storing in wp-config.php (which is also done...), but then it's not user-editable from the admin interface.
- Storing in a INI or JSON or similar document, which has only marginal if any benefits over storing in the database.
For deployment, since the location of the database values is fixed, you can set the variables with your deployment scripts.
Storing the domain in the DB may be reasonable if it's done once, but WP does it multiple times: WP_SITEURL ("the address where your WordPress core files reside"), WP_HOME ("the address you want people to type in their browser to reach your WordPress blog") and of course GUIDs for every post have the domain hardcoded into their values (that can mess up links in a weird way, where you're on your local environment, click a link, and now you're silently on prod).
I could definitely be missing something, but I can't for the life of me figure out why this is a good idea.
Not as easy as you make it sound.
wp seach-replace 'old domain' 'new domain'
A few times I had to help out friends customize something I was horrified at the overall level of code quality. It looks as if a B-level programmer started it and C-level programmers helped... And I think this is the crux of it. A-level programmers in general are not interested in such frameworks because they know how to use less friendly ones (and thus don't work on WP & co.) while C-level programmers need such a solution and are willing to help... to the best of their ability of course.
That said, they made WP very convenient to use (great admin console, easy installation, no major headaches... well, apart from vulnerabilities ;). Other projects should learn from that. Who cares about great foundation if UX sucks? (Typo3 anyone?)
EDIT: replaced "C programmers" with "C-level programmers". I am not talking about those who use programming language C. :)
A lot of people, obviously. You said it yourself.
Many of us have read opinion articles from 30 years ago about how much Unix sucks, or Windows sucks. But they became widespread for a number of reasons -- which led to app developers wanting to develop for that ecosystem. Same here. Wordpress is GPL and runs on almost all hosting providers. The economic incentives to develop commercial and non-commercial themes and plugins for that ecosystem are obvious.
Of course, they never figure out how to edit the site, because the WYSIWYG editor is anything but, and even the text editor "enhances" the html you type in inexplicably. They don't know the difference between a post and a page (or a blog for that matter). So they give up, and wind up hiring you to add content too.
Which is great (yay, money!), but now you have to actually work with this monstrosity and you wind up wishing you had used something like middleman or sinatra like a proper gentleman. But deep down you know that would have been a bad idea as well, because they'd call you in three years to fix the outdated mess that became of your beautiful site after years of neglect. And you'll do it despite not wanting to because they won't be able to find someone else who knows how and that will make you feel guilty.
Meanwhile, WordPress just chugs on, smug in it's mediocrity.
It's really a ghastly creation, if you ask me.
That hasn't been my experience with tens of sites and tons of clients I've known. Simple, non IT people, can edit the sites and change content VERY easily.
Oh, and of course MILLIONS of people edit their own posts for their blogs in the hosted wordpress.com, with the exact same editor.
So, I call BS.
I have come across many potential clients who say "can you do it all for me, i don't want to do anything" and personally for me, they are not good fits to use wordpress. But when someone says "look I just need an easy to use interface to manage my website, content", then I give them wordpress.
WordPress is great for them. They want WordPress because it makes them comfortable to know they are on a "standard platform". They can hire someone else to maintain it if I get hit by a bus. So it's very easy for me to sell, and hosting companies like Flywheel (https://getflywheel.com) make it very easy to maintain. That was the point I was making - Wordpress is great for business. But, compared to other systems I have used, I find it technically very clumsy.
Usually, clients don't really realize they don't want to touch the site until it's in front of them. If I were certain that they would never want to edit before I started, I would be far less inclined to use WordPress, but might anyhow just because of the hosting/maintenance situation and the brand. I get tired of getting emails asking if I've updated the site for the latest high profile security patch. With Wordpress, I can pretty much ignore them with a quick "got it covered" response, because the (good) hosting companies fix this stuff before the clients are generally aware of it. At worst, I log in and click a button. That's great.
So really, I like WordPress, but only because it makes me money and saves me time. Everything else about it is fairly awful to me. I hate working with it. I hate developing in it. I hate that I have to wade through a sea of crappy plugins to find one that is suitable. And, easy as it is for you and I to edit, it's just too complicated for many of my clients. Sure, some of them are fine with it. But more often the CMS winds up being for me, not them.
This is all just my personal experience slogging through this stuff for the past several years. Milage may vary.
I'm genuinely asking here :)
The latest victims are the small CMS vendors who have been selling proprietary CMS solutions to public school districts for the past 15 years, charging far too much money (your U.S. taxpayer dollars!) for barely functional CMS's. The FCC voted recently to prohibit spending federal money on these solutions, a practice that basically created the market, so now every school district in the U.S. (14,000+) are looking around for cheaper and better solutions. A large percentage of them are migrating to WordPress.
E-Rate is a major funding source for school Internet connections and is ran by the FCC. The sidebar on that article says:
"Phases out support for some non-broadband services, such as voice services; and eliminates support for others, such as email, Web-hosting, paging, and components of telephone service such as text-messaging and directory assistance."
I'm guessing it relates to that "web-hosting" bit.
You can read more about the FCC's E-Rate Modernization Order :https://www.fcc.gov/page/summary-second-e-rate-modernization...
And most schools I know are migrating to Drupal.
The exception is the higher education market (colleges and universities), who are choosing Drupal over WordPress.
From Magnus Jepson's blog: http://jepson.no/we-are-joining-automattic/
> We had talks with potential partners, including VC firms and competing companies. This led us to Automattic, who had previously shown great interest in the popularity of WooCommerce. CEO Matt Mullenweg, who is also the co-founder of WordPress, had built his company in the same distributed manner as WooThemes with a team of over 300. This was our dream partner!
Here's a question: do you have any idea of what the first initial changes might be for developer/firms and how we work with WooCommerce/WooThemes/WooMatic?
Usually when a company merges like this, there's a period just after acquisition where both companies still operate independently while the higher-ups try to figure out the integration plan. That doesn't mean titles/roles won't change, but the same day as the announcement? It'd be business as usual at both companies.
As for WooThemes - will we start seeing proper documentation  when products are released? I've been bit in the past by something being released by WooThemes, and documentation taking another half year up to year to follow.
Without a doubt we're also going to have many more resources joining Automattic and their talented group.
Do you have any area (like better documentation, which you wrote about) where you have a clear vision about the future? Can you tell us about that? I think that will be more useful.
And they're trending up: http://trends.builtwith.com/shop/WooCommerce
It's low hanging fruit, not a lot of effort for decent return.
This actually happened to me. Low-hanging fruit is often a mirage when it comes to the CMS world.
Yes, it's for professionals. Hobbyists can always use some Haskell web framework.
Professionals can also use a Haskell web framework. Increasingly so for their day jobs, at least in my case.
Yep. One of the signs of a professional over a hobbyist is pragmatism in using his tools.
>Professionals can also use a Haskell web framework
Sure, but not by market demand. And they might also be making their clients a diservice by this choice (e.g. making the project difficult to maintain when he leaves etc).
However, coincidentally WooThemes offers a theme that advertises itself with something along the lines of "no sliders, no fonts, no bloat" - forgot the name, but it's a good move.
> here we find ourselves powering over 24% of online stores with our flagship product, WooCommerce
That seems pretty impressive and means they're definitely a top player.
That seems like basic information I'd expect to see.
Free ecommerce framework + lots of paid sub-plugins for years to come.
This will pay for itself.