The Comment Inbox

I’ve been whiteboarding a new WordPress comment management interface for about a year now — since before the Happy Cog admin redesign started. I had some lofty goals (admittedly some of them were borderline unachievable), but my main goal was this: make comment management more like managing a Gmail inbox. There are typically four actions you can perform on a message in your Gmail inbox (other than reading it, that is): reply, archive, mark as spam, delete. And “reply” is sort of diversion, so let’s make that three actions: archive, mark as spam, delete. The great thing is that if you do it right, at the end, you’re left with an empty inbox, and you know all your open loops have been addressed. It’s a good feeling, and it lets you know that the next time you dive into your inbox, you’re starting where you left off.

With WordPress comment management, it was more like jumping on a passing train of infinite length, and trying to deal with all of the passengers on board, without knowing which passengers have been dealt with (do you walk towards the caboose or the engine!?). When you’re done, you jump off, land on a cactus, and probably don’t feel like doing it again.

So my goal was to move away from the infinite train of confusion and more to the zen-like GTD tranquility of the Gmail inbox. Liz Danzico from Happy Cog alluded to a similar goal at WordCamp SF 2007. Although the Happy Cog redesign of the comment management screens is worlds better, it didn’t fundamentally address the speeding train issue. And to be honest, I’ve been stuck on the problem for months. I couldn’t think of an implementation that wouldn’t be a massively disruptive (and risky) overhaul… until tonight — kept awake by SXSW-inflicted cough and sore throat that refuse to die, I had my epiphany. The solution is already here. I’ve been searching for something that WordPress already does.

Drumroll please. The solution is: the comment moderation panel. Full stop.

I’ve noticed that Matt Mullenweg hasn’t quite been as dissatisfied with comment management as I have, and there’s a simple reason: he approves every comment that appears on his blog, whereas I deal with the comments after the fact.

Now I know what you’re thinking… but what if I don’t want to have to approve comments before they appear on my blog? Simple: tweak your blog to publicly show unapproved comments! Now there are three comment statuses in WordPress: approved (1), unapproved (0), and spam. With my proposed system those can be virtually “rethought” as: seen (1), unseen (0) and spam. Both “seen” and “unseen” comments would show on the blog immediately, but “unseen” comments would show up in the moderation queue (which, thanks to the Happy Cog redesign, shows its contents in a colorful comment bubble on every WordPress admin page). Welcome to your comment inbox. There are three types of comments: ham (good comments), spam (advertisements), and bacn (offtopic, lame, rude, abusive, overly-self-promotional-but-not-quite-spam), and there are three corresponding actions: archive (by clicking the “approve” link), mark as spam, delete — just like in Gmail.

I’m going to write a plugin that does this as soon as I can, but I’m also going to be looking for a way to work this into WordPress core, as I think it would really help people manage their comment load.

So what do you think? Is this brilliant? Am I completely off my rocker? Am I an idiot for not seeing this solution before now?

Update: Here’s the plugin!

70 thoughts on “The Comment Inbox

  1. Please correct me if I’m wrong, but this sounds like little more than a lexicon change with the added bonus of being able to see non-explicitly approved comments in the moderation panel.

    That said, I can see this functionality being quite useful for sites that have a huge readership and dozens (or hundreds) of comments posted per day. For the majority of bloggers, though, this might just be moderation overkill.

  2. If I understand you correctly, the system would work as it does currently. However, the option would be changed to “Display unapproved comments” or “Hide unapproved comments”. Is that correct?

    Personally, I think ignoring the “reply” action is the biggest failure in WordPress. I also view comments after the fact, although some are held for moderation. After approving comments, my biggest frustration is that I can’t then see the link to the post in order to reply. So normally I approve / delete / etc, then click back (to the cached comment moderation page), and click the post links.

    I think adding a reply option to the comment page would be most helpful. It would allow me to reply to comments right there, without going back to the post page.

    Seen vs Unseen

    The whole concept of “seen” vs “unseen” is huge. I’ve been mulling over a plugin like this for a while. It strikes me that reading my blog should be rather like reading an RSS feed in a feed reader. Users surely want to know what’s “new” since their last visit. Both posts and comments.

    My plan was to automatically log users, either if they’re logged in, or using a cookie. Then track what content they have “seen”. All content would be assumed to be “unseen” until viewed (seen).

    The mechanic is relatively simple. It might produce huge volumes of data. However, it may well be possible to store that data in the user’s cookie (like the post screen open/close status). If the data is lost, it’s not tragic.

    This could then be extended to the theme to either highlight new posts and comments, or to grey out seen posts / comments.

    Threading

    I also think that comments should be threaded by default. Along the lines of LiveJournal. If I reply to a comment instead of to the post, that should be noted and visually recognised.

    Notification

    Again, like LiveJournal, I think email notification of new comments should be an option in core. So when I reply to a comment, I can choose to receive emails about replies to my reply, or not.

    With these additional features, comments will become a much more powerful feature within WordPress. I think most of this stuff (except the seen/unseen part) exists already in the form of plugins.

    This comment is now long enough that it could almost be it’s own post! 🙂

    Cheers – Callum.

  3. I think Callum’s got a lot of great ideas; and I second the motion to make replying to individual comments:
    a) effortless from the admin area, and
    b) seamless to make them threaded (or at least fall inline… perhaps an option to modify the time stamp to be a default amount after the previous comment (one second, one minute, whatever) with a checkbox).

  4. If I understand this ‘seen’ ‘unseen’ section correctly, viewers of the weblog will be able to ‘see’ comments which have not yet been approved through a moderation queue. I assume, then, that bots will also be able to check them out and cache them.

    For me, then, there is the possibility that a spam comment which Akismet doesn’t manage to pick up appears as an ‘unseen’ on my weblog which can be seen by all and sundry even though I would immediately mark it as spam when I get to it.

    That, to me, is not necessarily a good thing.

    What I would love to see is the cutting out of one step in the moderation queue: comments which Akismet doesn’t pick up which I mark as spam are moved to the Akismet spam queue and have to be deleted a second time …

    Pi.

  5. Maybe the solution to sorting comments is to add a sort_order column to the comments table. Something like 1, 2, 3, 3.1, 3.2, 4. Where 3.1 is the first reply to the third comment.

    Then the comments could be blockquoted based on their indentation level. This would probably be compatible with most existing themes out there. Does that sound logical?

  6. If I understand this ’seen’ ‘unseen’ section correctly, viewers of the weblog will be able to ’see’ comments which have not yet been approved through a moderation queue.

    As I understand the proposal, this would become an option. It would not be required. So you could still choose to hold comments for moderation. But if you choose to have all comments public, then they would still be considered “unapproved” but would be visible.

    It would be your choice to decide which option you prefer. I think it makes some sense.

  7. I think that this is worthwhile for some people, although not necessarily everyone. It certainly requires a pretty damn near perfect comment spam engine. Since my defensio number is edging past four 9’s, i’ll definitely give it a shot.

  8. Again, like LiveJournal, I think email notification of new comments should be an option in core.

    Hmm, WordPress already has this option — “Notify the administrator of the blog of any new comments via email”? It works for me. Also, from every comment in WP Admin area, I can see to which post it belongs and can go there immediately (loading the links in new tabs).

    Of course, the system can be improved, but I don’t think I’d like the idea of showing un-approved comments in my blog posts… The current WP behaviour works for me. I approve, SPAM or delete a comment, if I wish, and that’s almost everything I’d like WP to do for me, in relation to comments management…

    …but maybe it’s just me and I don’t have so many wishes 🙂

  9. It would be better if we could store the bacn in a queue instead of deleting it. This way I have a record of all the crap that the trolls type without wondering if I have already moderated it.

  10. Hmm, WordPress already has this option — “Notify the administrator of the blog of any new comments via email”?

    I didn’t explain what I meant clearly. I mean that commenters, not the post author, should have the option to be notified by email. This is standard in LiveJournal I think. So when I leave a comment, I can check the box “Notify me by email of follow up comments.”

    I don’t think I’d like the idea of showing un-approved comments in my blog posts

    Just to re-iterate, I think the proposal is to make it an option. It’s not for everyone. But it would work exactly like the current system. You can choose to have some comments held for moderation, or not. You can, if you like, choose to have everything published automatically.

  11. I think it’s a great idea, but a flaw was pointed out above. I get a lot of spam, and occasionally they get through.

    90% of the time they go into the moderation queue, so it’s not a problem, but I would rather not have them going live automatically (which I think they would in your scenario?)

    I would also echo the wish to go through to reply really easily, I wouldn’t take that out of the equation when you liken it to Gmail (which is a good analogy).

  12. Sorry, hit submit too early.

    Is it not possible to have a page similar to the comment moderation page that is effectively like an RSS feed?

    Or perhaps split the main comments page with an HR, anything below the line you have approved/replied/spammed, with a ‘seen all’ button at the top?

  13. @Callum:

    Sorry, I mis-understood:)

    OK, the thing with ‘notify me of new comments’ is currently available as WP plugin. But it would be great, if it was integrated with ‘default’ WP install, so you don’t have to edit manually your comment form and install and support plugins for it:)

    As for the second part, sure, if this is optional, of course this would be OK for everyone. I just mentioned that for me it won’t work very well, to show un-approved comments…

    Cheers! 🙂

  14. I also think dismissing the desire to reply is a grand oversight. Why not have one place to deal with all aspects of comments, including being able to reply? The ‘Better Comments Manager’ plugin offered the ability to reply, and I found that to be greatly useful.

    For the GUI, how about having a list of all comments, no matter what their status, color coded so you can visually see the difference (like labels in Gmail). Maybe ‘seen’ are green, ‘unseen’ are orange, and ‘spam’ are red (or ideally, the user can pick their own colors, like in Gmail). Then you should be given filter boxes you can check so you can opt to not have any of the above displayed in your list (and if it was ajax so they appear and disappear immediately that would be ideal). I could opt to show every comment, while the next guy could opt to only display unseen comments.

  15. We use WP and its comments function for our small-town daily news website. We moderate all comments and allow anonymous commenting.

    The one thing I think WP’s comment system is missing is a way to keep in a separate file comments that will not be approved, but are not spam. Right now, the only option is to delete them. (Or, you can keep them in the queue, forever unapproved, but that’s not the right solution.)

    Just as suspected spam is sent to its own area by Akismet, I would like to have the option to send unusable comments to their own bullpen so I can contact the authors and ask them to try again, or even just to see who my most regular offenders are.

  16. The one thing I think WP’s comment system is missing is a way to keep in a separate file comments that will not be approved, but are not spam. Right now, the only option is to delete them. (Or, you can keep them in the queue, forever unapproved, but that’s not the right solution.)

    Yes! I’d like to have a way of having a fourth tab in the COMMENTS section (WP 2.3 interface):

    1. All comments
    2. Awaiting moderation
    3. SPAM comments (akismet)
    4. [new!] Not-approved & Not-deleted comments

    Would be useful for me, too. I have comments I don’t want to delete, nor spam, nor approve… Currently, I can simply have them in the all moderation queue… not very useful.

  17. I like Dave’s idea, in the scenario I described, this could be another status you could set that could be filtered out of your list of all comments.

  18. If I understand you correctly, the system would work as it does currently. However, the option would be changed to “Display unapproved comments” or “Hide unapproved comments”. Is that correct?

    That’s correct.

    If I understand this ’seen’ ‘unseen’ section correctly, viewers of the weblog will be able to ’see’ comments which have not yet been approved through a moderation queue. I assume, then, that bots will also be able to check them out and cache them.

    For me, then, there is the possibility that a spam comment which Akismet doesn’t manage to pick up appears as an ‘unseen’ on my weblog which can be seen by all and sundry even though I would immediately mark it as spam when I get to it.

    That, to me, is not necessarily a good thing.

    That’s what happens currently, if you’re not moderating every comment. So it wouldn’t be a change. It’s just much more likely that you’ll catch the missed-spam while cleaning out your “Comment Inbox.”

    What I would love to see is the cutting out of one step in the moderation queue: comments which Akismet doesn’t pick up which I mark as spam are moved to the Akismet spam queue and have to be deleted a second time.

    They don’t have to be. You can feel free to ignore the Akismet spam log, and they be automatically deleted eventually. That said, it’d be fairly trivial to write a plugin that would delete “mark as spam” comments after they’ve passed through their relevant filters.

    Personally, I think ignoring the “reply” action is the biggest failure in WordPress. I also view comments after the fact, although some are held for moderation. After approving comments, my biggest frustration is that I can’t then see the link to the post in order to reply.

    This was one of the things in my grand utopian comment management scheme. In order to work correctly, incoming comments should be grouped according to post/page, and in chronological order, so that they have the appropriate context. I suppose you could allow for inline replying without that, but it seems that you might reply to comment A with an answer when it was already answered by comment B which you haven’t yet encountered. What do you think?

    seamless to make them threaded (or at least fall inline… perhaps an option to modify the time stamp to be a default amount after the previous comment (one second, one minute, whatever) with a checkbox).

    Doesn’t need to be that “hacky.” WordPress has built-in database schema support for comment threading, and has for some time. We knew some people would want it, and we wanted there to be a standard way to do it, such that various comment-threading plugins would be interchangeable. So we have the comment_parent column that is unused but can be put to good use by comment threading plugins. I’m not really sold on comment threading for core. It seems to get abused and misused. i.e. people on Digg all replying to the first comment in order to get closer to the top of the page, or people threading their comment on the wrong parent. It doesn’t feel like a good fit for core.

  19. The one thing I think WP’s comment system is missing is a way to keep in a separate file comments that will not be approved, but are not spam. Right now, the only option is to delete them. (Or, you can keep them in the queue, forever unapproved, but that’s not the right solution.)

    Please, while looking back at this, give WP a way to mark comments AS deleted, not actually deleting them from the database. EG:

    States:
    Unmoderated (Default, blogs may choose to show/hide unmoderated)
    Approved
    Unapproved
    Spam

    The “comment queue” would be a list of the Unmoderated comments only, this way you can approve comments, unapproved them (which hides them on the site without destroying the record of “bad” commentors), spams them, or if you really, really want, you could truly delete the comment.

    When using WP in a corporate capacity, deleting comments is incredibly bad form. Right now, however, the only two ways to remove comments from the blog is to spam (wrong) or delete (wayyyy more wrong).

    Good luck!

  20. I’ve gotten over 400 spams on my blog that I continue to have to delete or report as Spam. What can I do to prevent this from happening, it’s really irritating that someone can do this. Any thoughts or help would be greatly appreciated.

  21. I’d much rather see a gmail search functionality added to WP – comments and regular search

    from:Mark
    has:image
    is:spam
    cat:wordpress
    -tag:movabletype

    etc

  22. Making unapproved comments public isn’t something that lights me up I don’t think.

    I would much rather see something along the lines of the Spam Karma style of comment processing where rather than the very granual ham/spam/bacon ratings we just have a karma for every comment – plugins can give or take karma away from a comment during the filtering process and then the karma levels for approved/unapproved/spam comments can be defined by the admin. This would give us a spamassassin style system for comments and people could plug whatever metric/system/measure they wanted into there blog. This is something I hope to work on for WordPress 2.6.

    However, my main comment inbox improvement is to integrate some form of inline reply into the comment page – something along the lines of the GSOC project I mentored last year would be wonderful and is something that I hope to get written soon.

  23. Making unapproved comments public isn’t something that lights me up I don’t think.

    Then you can just turn on “An administrator must always approve the comment” and you’ll have control over that. This is for people who don’t want to pre-moderate comments. For those people, all non-spam comments already appear on the blog immediately. This is just a better way to corral the comments. Instead of having just “approved” and “spam,” (which is all you get without a decent greylist), you can have “read,” “unread” and “spam”, which helps post-moderation immensely.

    spamassassin-like features and inline reply would definitely be cool as well.

  24. I believe the key to eliminating spam is:

    – Must register to comment
    – Must have approved comment before posts appear
    – turning off track-backs/pings
    – blocking certain countries 🙂

    300 comments a day, and essentially zero spam. It’s a wonderful thing.

    However, I do agree that something should be done about the comment system.. I’m using an older version of WP, but I’d love to be able to read particular users comments ala Gmail style.. with post name groupings or something… because when wp_comments represents 70% of your database size, it becomes a chore to handle at times..

  25. I do it like Matt does: approve all comments manually via the Moderation page. This works brilliantly until I have to moderate comments on a high-traffic, multi-author blog like wordpress.com because Moderation doesn’t search by post author. In that case I use the Manage Posts (edit.php?p=$post_id) interface to moderate comments on just my posts. So there are several good tools built in.

    A month ago I wrote a plugin (Quiz”) as a combination captcha and did-you-bother-to-read-the-post test. It works as expected: no bots, and fewer lame comments. If anyone has objected to my asking “What is my first name?” or “What am I brewing?” they haven’t spoken up.

  26. I didn’t make myself very clear, sorry. I do have the ability to approve, dissaprove, delete or spam. But I’m still getting these spams that I have to approve. In the last 4 days, I’ve gotten over 400 trying to push some scrapbooking garbage and then it changes to something completely nonsensical. Anyway, it just seems like after I opt to mark it as spam, it should reduce or irradicate further spaming. Does that make sense?

  27. So there are several good tools built in.

    … if you want to approve all comments manually. My plugin basically gives you the power of that interface without the delay and responsibility of constant comment pre-approval.

  28. nicki, if you’re using Akismet, then in theory, the ones you mark as spam should eventually be picked up by the system. But not all spam is equal, and some spam is easier for Akismet to identify than others. My advice to you would be to try and find a common component of that spam and then add that word or phrase or URL shard or whatever to your WordPress comment blacklist.

  29. Mark, very cool idea. On busy blogs it can be a little tough to keep up with and respond to comments. Nice work. Adding this plugin to my list to install!

  30. My problem with this idea is that it combines two activities in a way that benefits neither.

    Comment moderation is an administrative function; comment replying is an author function. I don’t understand the need to hack the former in order to perform the latter.

    Comment moderation activities include approving, unapproving, marking as spam, and deleting. Comment replying activities include replying and not replying.

    Why not add another sub-page to the Comment menu, into which all new (approved) comments are placed? With each comment are two options: reply and archive. Selecting reply will open a comment box for replying, and a submit button for publishing the comment. Either submitting a comment or selecting “do not reply” will clear the comment from the page.

    Thus, the comment administration (moderation) functions (and functionality) remain unchanged, while the author has a means to review all comments in order to determine whether or not to reply.

  31. Chip, that sounds like an excellent suggestion. While I agree with your separation of activities, I would suggest that a large number of users will perform both the administration and author functions simultaneously. I think the ideal scenario lies in combining your suggestions with Mark’s.

  32. Thanks, Callum.

    To clarify my previous comment, I think the idea to have a central place to handle all comment-related activities (admin or author) is a great idea, but it seems that Mark’s suggestion requires a loss of admin functionality.

    I can’t speak for most (or anyone other than myself), but I know that I could not give up comment moderation simply to be able to ensure that I have “handled” all comments.

    I would rather keep my comment moderation working the way it does currently while resorting to using email notification of new comments as a means to ensure I “handle” all comments, than give up comment moderation in order to have an admin interface for “handling” comments.

    Personally, I would think that most users would fall into the same category. (I base this assumption on my own experience. I have a very small blog, but even mine attracts spammers, squatters, and the like. I can’t imagine that anyone with greater readership would have *less* of such issues that necessitate comment moderation.)

  33. Hahaha, how ironic that your post should be followed by a spam comment Chip! 🙂

    I agree. Personally, I hold a lot of comments for moderation before they’re shown on the site, so Mark’s plugin won’t work for me. My suggestions related more to the idea of implementing comment handling changes into core. I think it would be great if you could disable email notifications and manage all comments from one dashboard (or even RSS, to allow many blogs to be managed from one place).

  34. I’ve been thinking about the criticisms and think I have a way that this could be integrated into WordPress core while addressing those criticisms:

    A new column on the comment table: comment_read with values of 1 or 0. There would be a new “Unread comments” tab. Performing any action on the comment (spam, bacn, approve) would also mark the comment as read. This could work in conjunction with wither pre-moderation or post-moderation. The moderation queue would only show unapproved and unread comments. This would give people a way to store bacn comments (just unapprove it) without cluttering up their moderation queue. Thoughts?

  35. Mark, I think you’re onto a winner. Sounds like an easy change that will add huge functionality. It’s so simple it seems obvious. Comments from yourself could automatically be marked read of course! 🙂

  36. Mark, that sounds good (I think, if I’m understanding correctly) – provided that the UI (unread comments tab) allows for (optionally) replying to comments, I think it captures everything.

  37. Mark, I like the idea of a column containing comment_read. This would allow me to keep all the trolls comments as evidence, but without anyone else seeing them.

  38. +1 at ryan –
    Not just for troll comments, but for off topic comments. Suspected spammers, too: I don’t want to delete/spam them if i’m not sure.

  39. all these talk about seeing/unseeing,etc.. are justt simply unnecessary and is just cosmetics.

    what wordpress should have is plain and simple, REPLY to comment feature, from the Comments admin dashboard, without going to the actual post and replying to a comment. without this, it is simply annoying. so many bloggers out there really needs this.

    why did wordpress overlooks this feature? becuase so many people goes for so many cosmetics with all the above talk and even the article itself and overlooking the functinal and essential would be features.

  40. This is a great tool for those who have a high traffic of comments on their site. This information really should be considered essential for those looking to moderate a high volume of traffic every day.

  41. Я занимаюсь разработкой и созданием сайтов. На моем сайте Вы сможете посмотреть выполненные мною работы по дизайну и созданию сайтов.

  42. ИЛЛЮЗИЯ.COM – У нас на сайте: Оптические иллюзии и Стерео картинки и стерео изображения и зрительные иллюзии и многое другое! Заходи!

  43. Is this brilliant? This is genius! And I’m not just saying this for flattering; it is dead useful, especially when I have a small group of people moderating comments with me and need to be aware of which comments haven’t been reviewed yet.

    I’ve always struggled with the approve/unapprove comments feature – it is excellent for allowing me to keep track of which comments I’ve reviewed and haven’t reviewed, but of course, as you mentioned, it hides comments from new commentators and leaves the people who’ve already commented frustrated at seeing “Your comment may not be visible until it is approved”.

    I believe that you should change the title of this post and/or your plug-in to “Visible Unapproved Comments” or some variation of that. At the very least, include the phrase early on in your first paragraph. It is how I found this article through Google – the words describe your plug-in and they are also the simplest keywords a person can use when looking for a solution like this. After all, no one would think of Googling “Comment Inbox” when they wanted to be able to approve comments but keep them visible from the start.

Comments are closed.