
Making Django CMS as easy to install as WordPress - DanieleProcida
https://www.django-cms.org/en/blog/2016/06/09/making-django-cms-as-easy-to-install-as-wordpress/
======
onetwotree
So, a reasonable question to ask is what can I recommend to non-technical
people when they need a website quickly and inexpensively that won't make me
feel like I'm setting them up to get owned?

Also what advice should I give to WordPress users to help them improve
security, other than the rather useless and bratty "don't use wordpress lol"
answer? I'm a security professional and I follow the constant stream of "lol
WordPress exploit" articles, but proactive security measures for WordPress are
a bit outside my usual enterprise infrastructure work.

~~~
SwellJoe
I still, currently, recommend WordPress, despite its flaws.

I don't recommend doing ecommerce (directly) with it, or anything that could
gather sensitive information, but for "just a website" with a bunch of cool
stuff, WordPress is pretty much impossible to beat for the sheer amount of
"cool stuff" you can do without ever writing code. The plugin ecosystem is
tremendous.

The automated updates, so far, mostly stay ahead of the curve on exploits in
the wild. We have a large pool of users to draw information from (thousands of
servers running all manner of web apps), and we're far more likely to see
exploits of systems that are harder to update; Drupal, Joomla, and especially
a bunch of little apps that have tiny market share and small maintenance teams
and cranky update processes. Having an easy and automated system for updates
is just incredibly valuable for security.

What really needs to happen is everyone making web applications needs to start
shipping a command line client for updates, that is safe/reliable enough to be
run from cron. Best of both worlds: you don't need the app files to be write-
able from the app itself (which is one of the big security concerns raised by
this post) and you're always running the latest version even on systems that
aren't being worked on daily. There's still the command line element to the
problem, but it could be mostly automated away by control panels and installer
tools (of which there are many).

There are a lot of forgotten CMS installations out there, and _those_ are the
biggest security problem, IMHO.

~~~
throwaway-hn123
WordPress now has a pretty good command line tool: wp-cli [1]

You can run `wp-cli core update` to update the core WP files. It can also
update plugins.

[1] [http://wp-cli.org/](http://wp-cli.org/)

~~~
ChristianBundy
Unfortunately this doesn't solve the problem that WordPress needs to be able
to write to itself. It's game over once every skid in the world can pop a web
shell in /var/www.

------
DanieleProcida
Just to gather some of the other comments together, __if you 're a Django
developer already, then you're used to more difficult deployments __.

So _anything_ that goes in the direction of easier (WordPress-style if you
wish) deployments is going to be a big bonus for the Python/Django developers
who are already committed to the language or the framework, and is going to be
a big win for the service that can provide it.

I don't think I am giving away any of grand secrets if I say that that's what
we're doing (and trying to do more of) - be a first choice for Django/Python
developers.

For the Django developers, it doesn't _need_ to be as easy as WordPress - it
just needs to be __easier than the other options __(which seem to begin with
hammering bits together by hand until you have a working server, sometimes).

(That may not be enough to bring in users who may have gone for WordPress, but
that's a further ambition.)

In the meantime, easiness really is important, which is why I think there is
so much to learn from WordPress's success, but __ease-of-deployment is
definitely not the only thing that 's important __.

For example, I don't think it's an unfair comment to say that one flaw
WordPress has is security, and that Django/django CMS/Aldryn are much more
secure, and that alone should be something people think about.

Or: there's more to hosting than dumping some files into a web server's
directory. New deployment technologies such as Docker make it possible for a
Django site built on Aldryn to be taken away and hosted somewhere else in
minutes - being able to migrate your deployments if you wish to isn't an eye-
catching advantage, but it's really valuable from a business point of view.

Or yet again, Docker makes it possible for a cloud hosting platform such as
ours to be way more than just a hosting or deployment platform. It's also a
development platform, with tools that integrate the desktop and the cloud and
make the work of the experienced application developer easier, not just that
of the non-technical person who wants a new site.

Anyway, that's a slightly long-winded way of saying that the lesson from
WordPress is extremely valuable, but the way it applies to Django doesn't mean
that we have to compete on WordPress's terms!

~~~
crdoconnor
If you want an easy one click set up for Django, ansible's a much better
approach than docker.

------
kureikain
I don't see why Django CMS will be more secure than WordPress or other way.

From a coding point of view, the more people works on it, the more chance the
security issue will be noticed and fixed. Rails, Django or any framework in
general always have security issues at some time.

The issue of WordPress is come from the easy to use. The ability to install
plugin require write permission from the user that run WordPress.

Second, many WordPress plugin expose executable-php file in plugin folder that
is invokeable via hitting directly that url.

So if Django CMS has that ability, allow downloading 3rd-code and run it, I'm
not sure if it's more secure than WordPress.

WordPress is just as secure as any Rails or Django app. Bug happens, people
fix.

~~~
est
> Rails, Django or any framework in general always have security issues at
> some time.

No. Rails & Django have vast smaller attack surface than PHP's default.

~~~
lima
Also, when was the last time you could compromise a Django install or even get
remote code execution?

------
ycombinatorMan
Just because it serves a purpose doesnt mean it shouldn't be criticized.

~~~
DanieleProcida
Do you mean WordPress? Sure, of course it shouldn't escape critical scrutiny,
but people actually _sneer_ at it (and PHP generally, and worse, at PHP
programmers).

There's a lot to learn from WordPress and PHP.

~~~
gtf21
Well, in fairness the WP codebase is horrific. I used to write everything in
PHP, and once thought it a good idea to build a system in WP because it was
user friendly. I needed some custom auth plugins and a custom theme.

Having fought with a poorly documented, inconsistent and generally badly-
designed codebase for a few months, I'm not sure I'd agree that WP is
undeserving of some sneering. It is one of the worst made things I have ever
seen.

PS: I no longer develop in PHP, and haven't seen the WP codebase in about
three years so perhaps it has improved.

~~~
knieveltech
It's worth underlining that the only people in the world that give a fuck if a
codebase is a tangled mess are developers. Everyone else is solely interested
in ease of use and budget concerns.

~~~
mtberatwork
For anything non-trivial, a poorly written code base and/or poorly implemented
database schema/layer becomes a liability, both in time and money.

~~~
dwaltrip
It's a spectrum, where that liability is only a net negative past a certain
point. Most WordPress users don't reach that point.

------
oliwarner
Installation isn't even half the battle. _Updates_ are the killer thing in the
Python world that even seasoned Django devs (raises hand) get wrong every so
often.

Sure, you can `pip install -Ur requirements.txt` but will it work? Do I need
to set up continuous integration? Testing servers? What happens when there are
backwards incompatibilities between elements?

As things are you need a Django dev on staff to run a Django website. There is
no dev-deploy-dump process that Wordpress "designers" get to enjoy. It's
constant.

To really compete, Django (not just Django CMS, IMO) needs environment
monitoring, testing and upgrading baked in. Many will argue that it's not its
job —and they aren't wrong— but nobody else seems to be willing to do this in
a way that anything but a seasoned programmer capable of running.

------
pbreit
No matter the author's contention, PHP apps are still much easier to install
which is pretty much the sole reason for PHP's original and continuing
popularity.

~~~
wastedhours
Exactly - every £2pcm shared hosting plan allows PHP, you need to actively
look elsewhere for something "more exotic", and know what you should be
looking for to begin with...

------
startupdiscuss
This is a great contribution but it seems to be tied to a single vendor, and
subject to the vendor's pricing.

This is fine, fair, good etc. It is not a criticism of the service, but when
digital ocean offers a one-click install of django-cms or mezzanine etc, I
think we'll know it is in the mainstream.

~~~
icc97
I love python, and Django is awesome, but to claim that the paid for Aldryn
Cloud comes close to the WordPress.org 5 minute installation [1] is stretching
it.

It's not just about the time taken it's about the almost complete flexibility
of any web server anywhere.

The Aldryn Cloud is if anything similar to the WordPress.com setup where you
just fill in a form and they handle the hosting for you.

But WordPress.org had their 5-minute installation sorted out 10 years ago.

N.B. That now along with the installation you have a complete choice of what
language you want your entire system in. The amount of work that has been put
into translation by WordPress and making sure that the entire rather huge
ecosystem can be translated is phenomenal.

They have some pretty good automated system testing for security flaws in the
plugins that are submitted. I've witnessed what happens when one fails. They
send you what the problem is and how to replicated it.

Bare in mind all of this has been done through open source code with what I'd
say is still done with companies that are run with very little greed. You
won't find Mark Zuckerberg here answering questions on HN, but Matt Mullenweg
has long been giving answers on here [2].

[1]:
[http://codex.wordpress.org/Installing_WordPress#Famous_5-Min...](http://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install)

[2]:
[https://news.ycombinator.com/user?id=photomatt](https://news.ycombinator.com/user?id=photomatt)

~~~
startupdiscuss
You may have the advantage of having tried the Aldryn cloud.

Have you tried Mezzanine? I heard that was even easier to set up, and might be
a better candidate for a transition to 1 click.

------
rampage101
The difference in difficulty between Python/Django and WordPress is massive.

To do Django you have to know Python, which is a big assumption. For Wordpress
you need basically zero programming knowledge.

Also compared to Flask, Django is much more complicated by making you adhere
to their MVT (Model-View-Template).

~~~
n0us
To be fair, Django doesn't make you adhere to that pattern and you can use
Django any way you please. Django has a lot more "in the box" than Flask and I
will agree that I think it's more difficult to get started with.

~~~
rampage101
Yea you are correct. Just saying when you read a Django tutorial and they say
a "View is not a View", meaning that the Django View is different... that is
not exactly newbie friendly.

~~~
DanieleProcida
I'm not so sure, I understand Model-View-Template much better than I
understand Model-View-Controller.

And for a real beginner, what a view is doesn't matter at all; what matters is
how quickly they can start to feel they understand what they are doing with
the system.

~~~
hobs
So your argument from personal knowledge is why something is easier or harder
:)

Here's my experience: Having attempted to do semi-meaningful things in both a
few years ago, I can tell you that hacking on wordpress and figuring out its
internals (as a newbie in php) vs hacking in django (as a newbie in python)
that the django experience was orders of magnitude more effort.

------
DanieleProcida
Well if I'd known Hacker News was going to repunctuate my title I'd have done
it differently!

~~~
buckbova
But the title is "Making django CMS as easy to install as WordPress." Or did
you just change it?

~~~
DanieleProcida
It removed an exclamation mark!

~~~
glogla
And now you're trying to make up for it!

------
dtougas
I am a Python/Django developer. I am not a WordPress fan, but I am not above
recommending it to people, provided that they understand what they are getting
into. This is what I generally tell people...

\- WordPress as an 90/10 solution: You can get 90% of what you want for 10% of
the effort, and you don't have to be a programmer to get most of the way. It
is that last 10% that will suck 90% of your time, and it won't be pretty. In
fact, it will probably be terrible and (as a developer) you will feel very
icky about yourself when it is done. If you can be satisfied with getting
close-to-but-not-quite what you want, then you will probably be happy with
WordPress. If you are very particular about that last 10%, then you will
probably be in for a world of pain. It may end-up costing just as much (or
sometimes even be cheaper) to go with a custom/Django solution in those cases.

\- WordPress works well as a basic publishing platform. That was what it was
designed for, and that is it's sweet spot. It isn't however ideally suited to
application development. The further you head down the path of trying to make
WordPress behave outside of the standard content publishing paradigm, the more
painful and difficult it will become.

\- You absolutely have to stay on top of security and updates. If you aren't
willing to spend that time, then you will end-up paying for all the time you
saved when you set things up by having to deal with security fallout.

I recognize the appeal and place that WordPress has in the marketplace. I also
recognize that people that need it are not my target clients. I have learned
that my sweet spot for development is to fill the niche where WordPress isn't
a great option.

------
clifanatic
I refuse not to be snobbish about WordPress.

~~~
kolme
WordPress is a mess. It's a never ending source of problems. It'll save you
some time upfront and then it'll cause many headaches later on.

It's just better to stay away from it. It's not about being snobbish. It's
just pointing out the truth.

~~~
tekklloneer
I have had the exact opposite experience. As long as you install one of the
common security plugins (and not much else), then you're fine. And all those
plugins do is ensure things like strong passwords and auth retry lockout.

A large part of the problem comes from the many, buggy plugins you can one
click install from within wordpress.

~~~
collyw
"A large part of the problem comes from the many, buggy plugins you can one
click install from within wordpress."

But isn't that the main benefit of Wordpress - the huge amount of plugins?

~~~
tekklloneer
The main benefit of wordpress for most users, as I see it, is a way to get
simple, user friendly CMS onto their own domain.

For me, it's for my handful of non technical users to be able to publish posts
and have a central repo for sharing event information.

------
neokya
I really want Aldryn to succeed. I have tried to test it out, and my major
issue is documentation and not so clear UI.

For example, it's not clear to me how can I clone project I created on Aldryn
and work on local. It's been about 10 minutes I am clicking around, still
can't figure it out. Do I have to use Mac app? Can I work on as usual Django
project on command line and just do git push when ready? Even docs here isn't
clear to me [http://support.divio.com/hc/en-
us/categories/200815715-Local...](http://support.divio.com/hc/en-
us/categories/200815715-Local-development)

Btw, that django cms demo with Aldryn boilerplate is kick ass.

Edit: After lots of clicking, I found how to install aldryn client.

pip install aldryn-client

~~~
DanieleProcida
If you're having any trouble getting to grips with it, don't hesitate to drop
us a line - on our live help system if you wish:
[https://www.divio.com/en/#intercom](https://www.divio.com/en/#intercom)

Otherwise, both [https://www.django-cms.org/en/blog/2016/02/16/build-a-
websit...](https://www.django-cms.org/en/blog/2016/02/16/build-a-website-
without-knowing-python-django-part-one/) and the Guided Tour
[https://www.divio.com/en/academy/aldryn-cloud-django-cms-
gui...](https://www.divio.com/en/academy/aldryn-cloud-django-cms-guided-tour/)
will help.

------
limeyy
The only truth about Wordpress being so successful is its theme availability.
Envato can for sure be responsible partially for its success.

It's not that Wordpress is good, or great or that much extensible. One could
easily look for ExpressionEngine or Craft, if that would be the case.

But if you want a 1-click install, plus slap a 50$ theme on it, and your stuff
to look pretty good, Wordpress is a viable solution.

However, if you want to customise stuff yourself, things become really
dreadful very quickly. Anyone saying otherwise, hasn't done so.

All the other stuff, about any of its "goodness" as addressed here in the
article, is basically the author doesn't knowing any better, what a real CMS
is supposed to do.

~~~
busterarm
> However, if you want to customise stuff yourself, things become really
> dreadful very quickly. Anyone saying otherwise, hasn't done so.

Before I understood hooks & filters as publish-subscribe? sure. Afterwards? No
way.

Do you want to know what's dreadful? Having a content team that needs to build
10k pages of content in a Rails site.

Do you know what's not dreadful? Having a content team that needs to build 10k
pages of content on WordPress.

The latter can be supported by just me. The former? I don't even know.

------
dempseye
Do you see real economic opportunities in the Django-CMS space that will lead
to people investing effort in it and improving it to the point where it is an
option for the kind of people who use Wordpress?

~~~
DanieleProcida
At the moment, the WordPress market economy is based largely on small margins
over very large quantities. django CMS definitely isn't in that space, or even
aiming for it, right now.

In the meantime though, we know that django CMS is a serious choice of
Python/Django agencies and large corporations and other organisations.

You can see django CMS mentioned in job advertisements on a regular basis.

A surprising number of large corporate websites use django CMS.

There are numerous businesses in Europe and the USA that are django CMS
specialists, building websites including CMS components for their clients, all
based on django CMS.

django CMS is a free open-source product, but has paid developers working on
it full-time.

Finally, it's sufficiently well-known and well-used to warrant the creation of
Aldryn, a cloud deployment platform that was built around serving django CMS
(even if now it also serves Django more widely).

Again, it's not the scale of economy that exists around WordPress (but then
what is?), and there are many things that we hope will grow over the next few
years, such as a thriving marketplace of not just free open-source but also
paid-for addon applications, and even competitors to Aldryn.

So the answer is _yes_ , in a word.

~~~
dempseye
Thanks for your response.

------
rebootthesystem
Can I use Aldryn on Linode?

Does it come up with full email installed?

Today you can go to GoDaddy, rent a VPS relatively cheap, fire-up a Wordpress
install and be up and running with a website and full email service for a
small business inside of one hour.

Attempting to achieve the same with Phython/Django/Django-CMS on something
like a Linode is an exercise of frustration.

I love Python/Django yet, more often than not, I have no choice but to point
people towards Wordpress.

...and then there's the Python 2.x/3.x mess...

------
brianmurphy
Vanilla WordPress may be the wrong target when trying to design for ease of
use. Page builders have superseded the TinyMCE "visual" page/post editor.

Beaverbuilder is the most talked about modern page builder at the WordPress
meetups I attend.

Try to build a homepage layout like airbnb.com with your tutorial and again
with beaverbuilder. You will find a huge technical difference.

------
DjangoPress
I know both systems and will not fight for one or the other. I will try to
summarize the most annoying points in both systems.

Many things in WordPress are brilliant, and none of the Django content
management systems got that right. Every WordPress user can very quickly learn
to actually manage their content with taxonomies (categories, tags, or custom
made ones), and then build e.g. a menu or special pages for a category very
easy out of that categorizations. This is brilliant.

Also the hook system is great, so easy to add and combine pieces of code, one
of the reasons for that enormous amount of plugins (of course not all of them
are of good quality, ahem).

Also the extremely easy extension via custom post types and custom fields
allows to build a lot of things very quickly. Try to build dynamic models with
Django - a major limitation that is seldom talked about, but very important.
This is one of the most boneheaded Django dead-ends that I have hit - how can
a system that is build for dynamic content generation make it so hard to
dynamically define and generate models? There are some approaches, but you are
getting into 'fight-the-system-mode' with all of them, because that
boneheadism is build into the basic design of Django.

Of course, the code base of WordPress is very old and a constant source of
trouble, if you are depressed, go and read some WP code, you will have fun, I
swear! But it must be said that it is really great how the WP devs keep up
backwards compatibility - you can run and update the system for years without
worries, this is very important for a cms!

Django devs did not understand that. So many people are lagging behind with
updating their Django apps / projects, because the django devs missed this
most important point! So many changing things, stupid little things, but
breaking and mutating like a radioactive godzilla, you see the results in a
universe of incompatible django apps. They missed completely that it is a good
thing to "never break user space", really a problem here. Do not change the
API! Thanks god they started to do that LTS thing now, so there is some hope
now that serious enterprise business will take a look at Django.

Luckily WordPress now has automatic updates, so admins do not have to panic so
much. Biggest problem, of course, is that annoying dependency on MySQL, I hate
it, and I also hate the catastrophic generation of sql queries - and do not
even try to look at the mysql query log when you install the super-bonehead-
ultra plugin by mister uberhaxor!

But caching is mandatory anyway, or even better, export to static pages. Do
not even put that WP on the internet - let authors write to an isolated
environment and export all the pages into a static cache after updates. Do not
allow comments.

If only all these great WP ideas were implemented on top of Django, that would
be perfect.

But all the existing Django CMS are extremely far away from the easy WordPress
usability. Like WP was made by artists and all the Django CMS made by
bureaucrats. Wagtail has some future, but is still missing many, many
features, also I see some problems with the content model, having to define a
new model for each new type of content will not work in the long run - they
are hitting that annoying Django design limitation here - it is not a
framework build for dynamic models (eat that absurdism!).

There must be something inherently wrong with Django that it seems not to be
possible to build a feature-rich CMS that tops WP easily - everything that
exists is extremely beyond the state of the art, unfortunately, and I wonder
if that has some reason connected to Django. Any PHP project would have
millions of plugins after such a long time (working and compatible) -
meanwhile you can be happy if you find a Django app that works out of the box
with the latest Django release, lots of bitrot. Even the demo apps sometimes
do not work, try to run the mezzanine 'drum' hacker news clone. This must be a
management problem, but I do not understand these things, however that problem
exists and it is annoying. You are riding high he Django train, but fall deep
with non-working apps all the time, this can be even worse than the WP plugin
hell.

WordPress is technically inferior, but there are so many brilliant ideas in
there.

Django, technically superior in any way, still misses anything like WP, none
of the CMS come close to the WordPress experience.

In other words: there is still room for innovation!

Just compare for yourself, looking at any of the Django CMS in 2016 will be
like a time travel back to 2010.

Today I hope that some people will re-implement WordPress with Elixir and the
great Phoenix framework. The Django Channels project will not be enough to
survive that.

~~~
tomd
This is a fascinating analysis. I'm the CTO of the agency behind the Wagtail
CMS ([https://wagtail.io](https://wagtail.io)) which you reference. People
like NASA, Google, Peace Corps, PBS run sites on Wagtail but I'd use WordPress
for my friend's 5 page site because:

\- < 5 minutes to organise cheap hosting \- automatic updates \- zillions of
themes \- someone else can fix it when it goes wrong

I hope Daniele and his colleagues at Aldryn will help with quick cheap Django
hosting (they do Wagtail too!). But I'm not sure that Wagtail or Django CMS
will ever be the right choice for this use-case. Of course you _could_ build a
WordPress equivalent in Django, using postmeta-style key-value tables that
abuse relational database theory but allow plugins to define their own content
types, and maybe someone should. Our effort is going into building a CMS which
helps implementers of non-trivial sites do the 'right thing': keep their
content structured, clean, related, filterable. Create once publish
everywhere!

There's a lot to learn from WordPress but I don't think 'dynamic models' are
the answer for situations where you have more than one developer (there's no
guaranteed parity between developer and production environments) or lots of
relations (postmeta-style tables have ugly joins, weak integrity checks, poor
performance).

~~~
DjangoPress
It would be fantastic if Wagtail had anything similar like the WP taxonomy -
content organization idea, this is the only part missing on the way to a real
WP killer.

This is not only about ui - giving users the power to build menus via the ui
is great, but the real thing that happens is that people have a great way to
actually _manage their content_ - for an experienced WP user it is easy to add
a new category menu, add some special section for a limited time or completely
restructure a site, etc., this is possible because of how they implemented the
usage of taxonomies and how you can structure your site with menus and
category pages based on that taxonomies or pull the content with a simple
WPQuery. This is very powerful!

People need categories, e.g. (not me):
[https://groups.google.com/forum/#!searchin/wagtail/category%...](https://groups.google.com/forum/#!searchin/wagtail/category%7Csort:relevance/wagtail/5bzMnky6Avo/4v9e0u1DBAAJ)

If the answers in this thread are right and it is only possible to implement
this usecase with custom model classes for each category, then this is a
serious design limitation that should be considered. I hope there is another
way doing that and I simply missed it, if there is, please make a blog post
about it, I beg!

I played with django tag-it and maybe there is a good way to combine it with
this wagtailmenu
[https://github.com/rkhleics/wagtailmenus](https://github.com/rkhleics/wagtailmenus)

It's about the ideas. I do not want to discuss WP vs. Django on the level of
technical details, I understand the context, I understand the code and I know
where WP is used and where Django and such a discussion is nonsense.

BTW I would _love_ to use Wagtail for all projects, but easy handling of
catregories (lots of them) is very important for long term content
segmentation.

Thanks for your attention!

~~~
tomd
Most of the sites we build on Wagtail use taxonomies / categorisation, either
with a foreign key to categories defined as snippets, or with custom model
classes for each page type, as you describe. You're right that Wagtail has no
'native' equivalent of WP's Categories, and perhaps that's a mistake. You're
also right to focus on ideas and usage over technical details; we fall into
this trap too easily.

I'm very interested in talking more about this, but without derailing the
topic. Please email me on my first name at torchbox.com.

------
jbb555
Does the advent of docker containers make creation and deployment of more
complex systems as easy as wordpress?

(I'm asking, I don't have any real experience of docker)

~~~
busterarm
I'm a dev who came from the Rails world to a primarily Wordpress one in my
current gig.

Wordpress still has some pain points for me (schemaless database) that are
only half-solved for me with plugins (mainly ACF Pro and Post To Post Links)
and a lot of code. I've basically built a request router and ~MVC into
Wordpress several times over, but not something I'm satisfied with enough to
release to public.

Most of the practices that we're used to elsewhere can be applied in the
Wordpress space.

Our build process relies on GitHub, Composer, Satis, CircleCI and Ansible (and
we use Homestead locally). We use modern hosts who are amenable to git
deployments so we don't have to use sftp. It took some work to get to here but
it's easier. Honestly it's far easier than most of what I've had to deal with
in the Rails space.

Wordpress, for the right kind of sites, can be great to develop on. Truly
great. And it's always great for content creators. I have yet to see another
CMS deliver half that experience for content creators. Please, show me one --
so that I don't _HAVE_ to use Wordpress anymore.

This gig has been interesting though. I see it as an opportunity to bring
saner practices into the WordPress space. If anybody is going to LoopConf and
wants to have a beer and a chat, let me know.

Keep the plugins to a minimum and you'll have a great time.

~~~
20years
"I've basically built a request router and ~MVC into Wordpress"

That sounds really interesting and something I think a lot of devs would be
interested in.

~~~
busterarm
I agree. A lot of folks have worked on the latter but I haven't seen much of
the former and had to build it myself.

In both cases what I did was highly specific to the spec of the WordPress
site. I've yet to come up with something generic enough and well-built enough
that I'm comfortable sharing. That's a problem with the WordPress ecosystem in
general I think.

The key moment to understanding Wordpress was realizing that its use of hooks
and filters are the publish-subscribe pattern. You can just hook the `parse
request` action and then do whatever the hell you like as long as you make
sure that the `query` (and ultimately `wp` object) that comes out at the end
of the process doesn't have something unexpected in it (tricky!)

------
mozumder
Wordpress really screwed up by having a schema-less database. Everything in
the database is a key-value pair. This means actual relational operations now
need to be performed in PHP, instead of letting the RDBMS handle it. This
significantly slows down the CMS, and so you have 1-2 second page response
times.

Meanwhile, my Django sites have response times in the 10-20ms range. (And
that's without caching.)

~~~
xrstf
"Everything is a key-value pair" is flat out wrong[1,2]: There are four key-
value tables (commentmeta, postmeta, termmeta and usermeta), but most of the
meat of Wordpress is stored in regular tables.

[1]
[https://github.com/ronaldbradford/schema/blob/master/wordpre...](https://github.com/ronaldbradford/schema/blob/master/wordpress.sql)

[2]
[https://codex.wordpress.org/images/2/25/WP4.4.2-ERD.png](https://codex.wordpress.org/images/2/25/WP4.4.2-ERD.png)

[EDIT: Corrected myself about the number of KV tables]

~~~
mgkimsal
if you're just using WP as a blog engine only, with basic functionality,
you're fine. that's what it was built for, and shines.

wp_options is a key/value table, and seems to be abused a lot.

storing "transient" data in wp_options - what's up with that? why not at least
have a 'transient' table, separate from the table that stores my ... options?

and... when you've got plugin systems that store everything in postmeta...
it's hard to do "normal" relational queries. woocommerce seems to be a good
example of this - order info in postmeta?

"find all orders in tennessee with more than $10 tax"

can only be done with multiple self-joins on wp_postmeta.

Perhaps they shouldn't have built it that way, but in my experience most
plugin authors use what's provided, and what's provided makes them jump
through hoops to do basic stuff, and is not well suited for larger scale apps
(but people get suckered in to it anyway because it's "easy to get started").
Who do you blame for these decisions/mistakes? WP? Plugin authors? End users?

~~~
xrstf
I see your point and share your pain about key-value tables in SQL systems.

------
2pointsomone
So I critiqued the Aldryn Cloud solution and Django CMS's approach on the
Disqus comments on their blogpost and it was swiftly rejected. This product is
far from the values of open source Wordpress is built on.

~~~
DanieleProcida
Your comment (if it's the one) was simply waiting to be approved in Disqus
moderation.

We won't reject comments unless they are offensively rude, spam, wildly off-
topic or otherwise significantly problematic.

We can withstand a little bit of criticism...

~~~
2pointsomone
Got it. I saw that a newer comment was approved so I assumed mine was
rejected. Apologies for that! I think the newer comment that was approved was
probably just from an account that wasn't moderated.

------
edem
Being snobbish about WordPress is like being snobbish as a Windows user.

