Don’t auto-unpin topics that a user is watching

Part of my paid-for offering involves the buyer’s topic being pinned for a few days.

One or two of those buyers have asked why their topic isn’t showing as pinned. This is because of Discourse’s auto-unpin feature, which un-pins a topic when a member has read it (only for that member). Auto-unpin happens immediately for topic authors, so they never see their topic pinned.

So, I explain how the system works, every time.

It would be handy if the auto-unpin didn’t happen for the author specifically on topics they have authored.

If auto-unpin didn’t happen for topics the member is watching, this would neatly solve the issue.

I’d like to keep auto-unpin enabled for all other cases as it’s a good feature.

Disable automatically unpin topics and default topics automatic unpin in your site setting.
All the topics I have created (as author) remain pinned and the auto-unpin setting disappears from the user profile.
Users can only unpin a topic manually.

1 Like

Thanks for the suggestion but I don’t want to disable auto-un-pin in all cases.

Then leave the user profile setting enabled so that users can decide whether or not to unpin topic they read.

I’m aware of the existing settings available, thanks.

My case is maybe a bit subtle. I do not want to disable auto-unpin for all topics. Just those a member is watching.

Think about it - this is a general case of UX “feedback.” You create a topic. You pin it. You expect to see that topic pinned. Principle of least surprise.

Someone else pins a topic that you’re not hugely interested in. You read it. It’s unpinned. That’s reasonable behaviour I’d like to keep.

But my own topics, those that are pinned - I care about seeing those pinned. And my advertisers who are paying for pinned topics - they definitely care about seeing their topic pinned.

1 Like

You’d have to make a plugin for this, it’s very niche. The #marketplace is the place to go if you need help.

1 Like

This may be quite hard to do as a plugin as it’s a change to some very specific discourse logic which isn’t exposed as an API hook.

I know it’s a bold thing to say, but I feel this proposal is a reasonable default behaviour for all forums.

I’m happy to do the Discourse code change myself and submit as a PR if @codinghorror, @sam and co are happy with the idea.

I’ve coded up a solution and raised a PR to discourse-core:

Happy to amend, or make it configurable if necessary.

I am uneasy about this. I don’t see the tight coupling between watching and not unpinning. Watching implies you care A LOT about new stuff, it does not imply you are asking to see the topic first up in the list every time. That would be a “per user pinning” feature which is a can of worms I don’t want to open.

I wonder if you should just go ahead and disable the auto unpinning altogether in your forum? Isn’t that the simpler approach to take.


I understand your concern @Sam. The reason I chose to disable auto-un-pin for topic watchers is that the author of a topic will be a watcher.

If I’ve authored a topic and had it pinned (particularly as a paid-for pinning) I would expect to see it pinned.

I think the same would go for someone who’s explicitly watched a pinned topic.

How about I change the logic of my solution so that just the author of a pinned topic avoids auto-in-pin for that topic?

I still don’t follow why we need to explain yet another edge case to an already super complex system. I do not see the coupling at all.

I am still not following why you don’t just disable all auto unpinning on your forum? It is way easier to explain


This is what I find peculiar. You’re making them stay pinned so that the author sees them stay pinned, even if everyone else unpins them immediately.

It seems more like this is an ad, and that’s why it should stay pinned for everyone.

The important thing about a pinned ad is that it is seen by everyone.

It’s fine to auto-unpin when a user has clicked and fully read the advert. There’s no reason to keep presenting the same advert to a user once they’ve clicked and read it once.

The important thing for an advertiser is that they see some evidence that their topic has been pinned.

Because of the way auto-unpin currently works (without my fix), the author of a pinned topic never once sees it as pinned — and naturally this is disconcerting for advertisers who have paid for the privilege.

Given that you know what code you want to change, your best solution is to put your fix into a plugin.

I would really like to do that but I don’t think I can as there is no plugin “hook” in the Discourse code that controls the auto un-pinning of topics.

Is this assumption correct, @sam?