Recommendations for improving WordPress comments

wp-comments-need-workThere are a number of things that concern me in regard to WordPress comments. They are one of those features that I have a love hate relationship with.

Comments are great for active, well moderated communities. I genuinely enjoy receiving comments from Post Status readers, where people often add value to the conversation.

For many websites, comments can be a sad and inactive wasteland or a trollfest.Β For most business and corporate websites I've worked on, comments are not wanted at all.

There seems to be a sweet spot of niche and medium-sized websites where comments tend to be most valuable.

But WordPress is fairly aggressively pro-comments by default.

Considering these things, I think we should take a look at default WordPress comment behavior and talk about how we may be able to improve the overall experience.

Comments should be off on pages by default

What percentage of WordPress pages do people really want comments on? I can think of very few scenarios where that's the desired behavior.

I think they are almost universally a posts-only feature, especially in the era of WordPress-the-CMS.

I believe comments on pages should be off by default with WordPress. I think they should be off for registered custom post types by default as well.

I realize removing support for comments on pages and CPTs is probably out of the question, but we could at least make them un-checked or toggled off. If you want to do so yourself, you can use this simple but excellent filter for turning off comments for pages in your theme or functionality plugin:

[gist id=”02df9fc6fe5bd758d21c”]

Note that this also turns off pings, which I also always do for pages.

“Website” should be easier to remove from comment forms

Currently, it requires the following filter to remove the website / URL field from the WordPress comment form:

[gist id=”3a4a39839a52b32a1b6b”]

But URLs really only make sense for a fairly high-tech audience. Average people rarely have websites. There are already 17 settings on the Discussion settings page in WordPress, and I think disabling the website field should also be there.

URL fields are also a haven for spam comments. Chris Coyier had the great idea to filter comments before approval based on URL length, since so many spammy URLs are long. Andrew Norcross made it so, and theΒ resulting tiny snippetΒ is a nice one to keep in your pocket.

Avatar settings

Now, in the spirit of decisions over options, I'll vote we also remove the default avatar setting, so as to keep the balance of the number of options for WordPress discussion. I mean, do we really need to be able to choose to show monsters if people don't have Avatars?


By the way, if we're going to have Avatar settings, we should go ahead and make local avatars a core option instead of requiring a plugin.

Global changes to existing comment settings should be possible in Discussion settings

The Discussion settings also have some checkboxes you can click to allow people to post comments on new articles:


The problem is, changing comment status in bulk after the fact is a pain in the butt.

You can do it a hundred or so at a time with the bulk post editor, or via direct MySQL query, but the former is cumbersome and the latter is dangerous for beginners. Nevertheless, here's how you'd do it with MySQL:

[gist id=”0fbdbdfd03aa09a80cf1″]

But please be careful when editing your database directly. Only do so if you know what you're doing. This is one of very few decent times to use MySQL queries directly.

I don't know the right answer on this one. I'd love some more powerful bulk comment editing options. I'm just not sure whether it's core-territory, or which location in WordPress would be the right place to host these options. There is a ticket for 3.9 with a patch for a global comment status setting; I'm just not sure if it's blessed for 3.9 or not.

“There's computer code on the bottom of the page”

The WordPress comment form is confusing, but if you've been around WordPress or websites with comments long enough, you probably don't realize it.

The headline for this section is an actual quote I got from a client. Comments were open on a page for a dev site I set up for them, and they emailed me asking me to remove the “computer code on the bottom of the page.” I had no clue what they were talking about, until I went to the page and realized it was this:


Yep, the default WordPress output for allowed HTML tags and attributes made no sense at all to them. And why should it? Should the average commenter really understand how to recognize HTML? Probably not.

Yet this is standard output for the comment_notes_after parameter of the comment_form function in WordPress.

I think we'd be better off not showing that at all. Those with a technical enough audience to understand could enable it as a parameter of the comment_form function in their theme.

Of course, Automattic already knows this. For / Jetpack commenting, only the comment field is visible by default, and the allowed attributes mess doesn't appear anywhere. Core should follow suit.

We should have better ways to teach about spam

Spam is annoying. Akismet is pretty good at killing spam, but it requires a account, and people get confused. It's also not super clear when signing up for Akismet that there's a free option.

So, what we have here, is a brand new website owner trying to activate Akismet to prevent spam, hitting a perceived paywall, then (if they don't follow through with Akismet) either giving up or opting into a third party commenting system.

I'm not saying third-party commenting systems are evil, but I wish native WordPress comments could handle spam a bit better than they do. Again, I don't know the answer here, but I would love to see some brainstorming around the topic. And I think packaging functionality like the Cookies for Comments plugin into core is a decent place to start the conversation.

Just scratching the surface

This post just scratches the surface of the bigger conversation I'd like to have about WordPress comments.

I haven't even touched more involved editing of the WordPress comment screen. In a recent case of attempting fairly “simple” edits to the comment form output, I found doing so surprisingly nonintuitive. I'm just thinking out loud here, but I wish custom comment forms were as easy as choosing template tags in the WordPress loop.

And I could write two thousand words talking about the various third party commenting options and their pros and cons: Jetpack comments, Disqus, Livefyre, Facebook comments, and more.Β But I'll save that for another day.

In the meantime, if anyone is curious, I use a slightly customized version of the Discussion plugin, built by the fine folks at Interconnect/it, to handle the Ajax loading and overall comment experience on Post Status.

Get involved

Some of the items I've brought up here are not new debates. And some also have tickets associated with the topics. You can browse all core WordPress trac tickets with the handy comment component search if you'd like to get involved with the future of WordPress commenting.

Speaking of discussion, I don't often ask, but I'd love to know what other folks think about my ideas and the commenting experience of WordPress in general.

Similar Posts


  1. I couldn’t agree more about turning comments off on pages/CPTs. In all my client work with small businesses, I have never had a client which wanted comments on anything but posts. And most of those sites which had comments on posts received almost nothing but spam.

    This isn’t a problem when I work with them for a fresh start. I can just turn them off globally and — the hack I often resort to — remove the comment section from page templates. But one site I worked with that had an active blog for years had 20,000-30,000 spam comments in their history — and who knows how many valid ones. We had to just get rid of them all and shut down commenting, because they didn’t have the time to moderate them.

  2. Yes, the allowed tags needs to be removed by default. I hear people wanting this gone all the time.

    As for spam – more people need to use the default moderation and blacklists options that are built in. Everyone I’ve looked at with spam issues never had those filled out.

  3. Nice wrap-up of some of the issues with comments, Brian.

    I’ve noticed that users very rarely realize they can disable comments on a per-page/post type basis, so pages wind up with unnecessary comment forms — especially contact pages.

    I wrote a quick plugin a few months back that exposes settings to allow comment/ping status to be toggled per post type using a concept similar to your snippet above. I might have to throw that on GitHub one of these days. While writing the plugin, I discovered that using quick edit on a hierarchical post type will always disable pings, no matter what the saved setting is. Considering that bug has been around for years, my guess is no one really pays attentions to pings or comments on pages, so your suggestion to disable them by default is worth considering.

  4. Thanks for such a thorough write up! I was nodding in agreement reading through each point. It’s funny the things you get used to doing for each project like disabling comments on pages and forget that everyone else has to go through the same thing.

    Comments as a feature hasn’t received a lot of attention in a while so it would be great to see a ‘back to the blog’ release focusing on improving blog features in WordPress.

  5. the comment form filters are handy, you can move the textarea to the top, change the profile link instead of going to the backend, going to your author page, very handy.

  6. I agree with most of this, for sure. I think trying to combat spam in core is a fool’s errand. The spammers will just work around whatever we try — it’s an arms race I have no desire to join. But other than that, I’m game.

    Most of this will require us to get serious about overhauling Discussion settings (the settings page, meta box, etc.). I think we can do a lot of this in a backwards compatible way, mainly because doing it that way happens to coincide with doing it the smart way. Things I like:

    I think we could tighten up the avatars section a bit. One, we can hide all of those monsters if someone has disabled avatars (the option right above that one). And two, we can probably make that more compact, it takes up too much vertical space. While the idea of core avatars isn’t a bad one, I’ve always found local avatars to be a lot of trouble, possibly more than they’re worth.

    I like disabling comments on pages by default. I also agree we need better controls for controlling comments globally. Ultimately, it’s not an easy user experience problem to solve. There are two many mixed states β€” comments are turned off globally, but individual posts can override that setting? Or vice versa? Or no? Or is it a one-time “action” that updates the database, rather than applying a generic filter? The implementation of any of these is pretty simple; the UX of how the user interacts with settings and posts is a bit more challenging.

    I don’t outright love removing the website field. On one hand I get why it could turn people away from commenting. On the other hand, it prevents the commenter from having any real identity. There’s no way for anyone else to connect with the commenter if they wanted to. Comments in general kind of suck, but I’m not sure making them more anonymous and even less important is the right way to improve them. (For what it’s worth, Akismet adds a cool little feature that lets you remove a website from a comment by clicking an “x”. I guess for when you want to approve a comment but their website is a bit spammy? I dunno, I guess maybe it isn’t that cool of a feature.)

    We already have a setting for requiring them to fill out their name and email, so it’s possible a redesign of the settings page could allow for this to work its way in.

    I also like removing allowed tags by default.

    I think a number of the quirks pointed out here date to a time when the web was less centralized and blogging was more niche: allowed tags suggest HTML knowledge, website fields suggest you have your own site, etc.

    1. Thanks so much for the feedback!

      I totally agree most of these things made complete sense in a day where blogging was quite niche.

      I agree the UX one for bulk editing is the hardest to solve well. I need to more more serious thought into that. I think I lean most toward something like the spam tab of the comments interface ( ), where you can sort by comment type and have an option to clear them all.

      A tab for “Status” and a filter for post type, with bulk editing buttons and lists of posts in the table… might work.

      I’m really excited that the other ideas all seem like good and workable ideas. That’s awesome! I appreciate you spending time contemplating my post.

    2. I agree with Brian in suggesting that the alternate avatar sources be removed. IMO, that’s an easy-win port to a Plugin.

      I think that Gravatar support out-of-the-box provides a means of connection to/identity of commenters. The Website field is probably superfluous.

      I also think that core support for local avatars is pretty important for any site intended to be used by more than a single person: band sites, group sites, business sites, etc. How big is that subset of overall WordPress installs? I don’t know. But I think support should be considered.

      Removing the list of allowed HTML tags is also a good idea, but I agree with Jeff Chandler: it should be replaced with some form of quicktag/markdown button/something to allow for easy, rich-text commenting. (Or am I the only one who likes to add formatting to comments? πŸ™‚ )

      I’ll have to dig up an old Trac ticket that dealt with exposing per-post-type comment-disabling options. The interest has been around for quite a while now. I definitely think it’s needed.

Comments are closed.