# Hiding paid members posts

**URL:** <https://forum.ghost.org/t/hiding-paid-members-posts/14071>\
**Category:** Memberships & subscriptions\
**Created:** [May 4, 2020, 12:42pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071 "2020-05-04T12:42:25Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vitalik](https://avatars.discourse-cdn.com/v4/letter/v/5daacb/32.png) [@Vitalik](https://forum.ghost.org/u/Vitalik)\
**Post date:** [May 4, 2020, 12:42pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/1 "2020-05-04T12:42:25Z")

</div>

Hi -

is there a way not to show paid members’ post excerpt to either free members and/or public? In other words, if a post is for paid members anyone with lower access levels wouldn’t even know the post exists.

Thank you!

---

<div class="post-metadata">

**Author:** ![DavidDarnes](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/daviddarnes/32/3533_2.png) [@DavidDarnes](https://forum.ghost.org/u/DavidDarnes)\
**Post date:** [May 4, 2020, 12:57pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/2 "2020-05-04T12:57:34Z")

</div>

Hey @Vitalik 👋

That’s totally possible with the use of custom collections and routes. We’ve written up a method of doing so in our docs, where you can create custom collections that filter out your paying content from your main site collection:

> **[Setting up memberships & subscriptions](https://ghost.org/help/setup-members/)**
>
> Getting setup with Members in Ghost involves connecting a Stripe account to take payments, setting up the Portal experience, and configuring outbound email settings for your newsletters. Using this guide you can get up and running in under an...

Hope this helps!

---

<div class="post-metadata">

**Author:** ![Vitalik](https://avatars.discourse-cdn.com/v4/letter/v/5daacb/32.png) [@Vitalik](https://forum.ghost.org/u/Vitalik)\
**Post date:** [May 4, 2020, 1:42pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/3 "2020-05-04T13:42:54Z")

</div>

Thanks, David - I’ll take a look.

---

<div class="post-metadata">

**Author:** ![daniel1](https://avatars.discourse-cdn.com/v4/letter/d/b19c9b/32.png) [@daniel1](https://forum.ghost.org/u/daniel1)\
**Post date:** [May 4, 2020, 2:00pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/4 "2020-05-04T14:00:48Z")

</div>

Hi @Vitalik,  
if you want to completely hide posts from being shown on your page, depending on the user level, you could use something like this.

(I tested it in the lyra theme, which is based on casper):  
Basically if you’re a paid member, you can see every post  
`(visibility="all")`  
If you’re a member, you can see the public and the members content `(visibility="public,members")`  
If you’re a public visitor, you can only see public content.  
`(visibility="public")`

```handlebars
{{#if @member.paid}}
        {{#foreach posts visibility="all"}}
        {{> "post-card"}}
        {{/foreach}}
    {{else}}
        {{#if @member}}
        {{#foreach posts visibility="public,members"}}
        {{> "post-card"}}
        {{/foreach}}
    {{else}}
        {{#foreach posts visibility="public"}}
        {{> "post-card"}}
        {{/foreach}}
    {{/if}}
{{/if}}

```

Let me know if you need help.

---

<div class="post-metadata">

**Author:** ![DavidDarnes](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/daviddarnes/32/3533_2.png) [@DavidDarnes](https://forum.ghost.org/u/DavidDarnes)\
**Post date:** [May 4, 2020, 2:31pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/5 "2020-05-04T14:31:42Z")

</div>

Side note to @daniel1’s technique, this may cause issues with pagination. Defining proper collection pages will ensure pagination will work as expected 👍

---

<div class="post-metadata">

**Author:** ![Vitalik](https://avatars.discourse-cdn.com/v4/letter/v/5daacb/32.png) [@Vitalik](https://forum.ghost.org/u/Vitalik)\
**Post date:** [May 5, 2020, 3:23pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/6 "2020-05-05T15:23:06Z")

</div>

Thanks, Daniel and David. For now, I went with Daniel’s solution because, honestly, I could not figure out how to make a single “/:” collection work for three different levels with the same logic as in Daniel’s post: if @member.paid - show all posts, if @member - show public and members, and just public otherwise. Maybe it’s not possible with one collection and three collections would be necessary instead. But than there is additional complexity of directing users to proper collection depending on their access level.

---

<div class="post-metadata">

**Author:** ![DavidDarnes](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/daviddarnes/32/3533_2.png) [@DavidDarnes](https://forum.ghost.org/u/DavidDarnes)\
**Post date:** [May 6, 2020, 11:48am UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/7 "2020-05-06T11:48:29Z")

</div>

The difference between my method and Daniel’s is that mine would create different pages that list different posts based on their visibility, whereas Daniel’s show/hide posts depending on their visibility level on the same page. Really depends on what you’re going for 😊

---

<div class="post-metadata">

**Author:** ![matt1](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/matt1/32/11779_2.png) [@matt1](https://forum.ghost.org/u/matt1)\
**Post date:** [February 26, 2021, 11:02am UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/8 "2021-02-26T11:02:27Z")

</div>

I have the opposite problem: with a default install of Ghost and the Caspar theme, my paid posts do NOT show up for anyone but paying members :(. This is bad, because I would love to tease public/free members with these paid posts. How can I turn the visibility for paid posts on?

By the way: the counters DO include the invisible paid post. You can see this on this pretty empty category, which has 1 public post and 1 paid-members post: [Improvise - Real World Music Theory](https://realworldmusictheory.com/tag/improvise/) . It says “A collection of 2 posts”, yet only shows one post (no teaser no nothing for the other).

---

<div class="post-metadata">

**Author:** ![DavidDarnes](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/daviddarnes/32/3533_2.png) [@DavidDarnes](https://forum.ghost.org/u/DavidDarnes)\
**Post date:** [March 2, 2021, 2:29pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/9 "2021-03-02T14:29:48Z")

</div>

> [@matt1](#):
>
> my paid posts do NOT show up for anyone but paying members

Would you like paid posts to be completely visible? Or paid posts to have teaser content? If it’s the former then you should probably not set them for paid only, if it’s the latter then either switch to Lyra which has this built in while still looking like Casper or use @daniel1’s code sample above to modify your version of Casper:

> [@Hiding paid members posts](https://forum.ghost.org/t/hiding-paid-members-posts/14071/4):
>
> Hi @Vitalik, if you want to completely hide posts from being shown on your page, depending on the user level, you could use something like this. (I tested it in the lyra theme, which is based on casper): Basically if you’re a paid member, you can see every post (visibility="all") If you’re a member, you can see the public and the members content (visibility="public,members") If you’re a public visitor, you can only see public content. (visibility="public") {{#if @member.paid}} {{…

---

<div class="post-metadata">

**Author:** ![A\_K](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/a_k/32/18155_2.png) [@A\_K](https://forum.ghost.org/u/A_K)\
**Post date:** [July 28, 2022, 3:29pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/10 "2022-07-28T15:29:16Z")

</div>

How would the conditional be used with Tiers where one tier is not checked in the portal and is invite-only?

I have Free-Public posts, Member-Posts (no cost members), Premium-Member-Paid posts (subscribed paying members), and Invite-Only posts.

My goal is for the Invite-Only posts to be visible only to those people I grant the tier to. They can’t sign up for the Invite-Only tier.

All the other posts can remain with default visibility, but once an Invite-Only user logs in they will be able to see Public, Paid, plus Invite-Only posts.

---

<div class="post-metadata">

**Author:** ![DavidDarnes](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/daviddarnes/32/3533_2.png) [@DavidDarnes](https://forum.ghost.org/u/DavidDarnes)\
**Post date:** [July 30, 2022, 5:46pm UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/11 "2022-07-30T17:46:23Z")

</div>

Most themes that are up to date with Ghost should handle this out of the box using the `visibility` filter correctly in post lists and the `access` helper shown here:

> **[Ghost Theme Development: Building custom membership flows](https://ghost.org/docs/themes/members/#access)**
>
> Find out how to build a custom theme for a Ghost Members site, with signup and signin, paid subscriptions, member accounts and more 👉

Ghost will know what access a member should have so long as you’re applying the right settings to the post in Ghost Admin

---

<div class="post-metadata">

**Author:** ![thatsnasty](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/thatsnasty/32/17349_2.png) [@thatsnasty](https://forum.ghost.org/u/thatsnasty)\
**Post date:** [August 17, 2022, 1:00am UTC](https://forum.ghost.org/t/hiding-paid-members-posts/14071/12 "2022-08-17T01:00:11Z")

</div>

Hi all,

Reading through all this and I’m more confused than when I started. I have a simple goal, only see paid members only posts when signed in. If not signed in you can’t see anything that its paid, no teasers to locked content etc, you don’t even know it exists.

The code snippet from `Daniel1` above looks like it will work but not sure if it’s the most up to date method. Not too keen on editing the theme either, makings updating harder. Maybe I should do a feature request if this can’t be put into a code snipped section

Thank you all for your time.
