Milo Memberships

Restrict pages, posts, and individual content blocks to customers with an active Milo Subscriptions subscription, with optional per-product rules and drip delays.

Installation

  1. Install and activate the free Milo Subscriptions plugin (WooCommerce is required too).
  2. Upload and activate Milo Memberships (Plugins → Add New → Upload).
  3. Enter your license key under Subscriptions → Licenses to enable updates.

Configuration

Under Subscriptions → Memberships you get two tabs: Settings and Restricted content.

Setting Description
Default fallback message Shown to non-members in place of protected content when no custom message is set. HTML allowed.
Subscribe URL Optional. When set, a “Subscribe” button is rendered under every fallback message. Point it at your subscription product or pricing page.

The Restricted content tab lists every post or page flagged as members-only, with its required products, drip delay, and status, so you can review all rules in one place.

Who counts as a member

A viewer must be logged in and have a subscription with status active or pending-cancel (still inside a paid period). When a rule names specific products, the subscription must contain at least one of them (variations match too). When a drip delay is set, the subscription must have started at least that many days ago.

Restricting a whole page or post

In the block editor, open the Membership restriction panel in the post sidebar. It offers a “Restrict to subscribers” toggle, a product picker (leave empty to allow any active subscription), and a drip delay in days. Post types using the classic editor get an equivalent Membership restriction metabox instead, saving to the same values.

When a post is restricted:

  • Non-members see the fallback message instead of the content and excerpt.
  • Restricted posts are hidden from archives, search, and other frontend listings for non-members (singular URLs still resolve and show the fallback).
  • REST API responses for posts and pages are gated too, so the protected body cannot be fetched via wp-json.

The restriction is available on all public post types except attachments, orders, subscriptions, and coupons.

Restricting a content block

Add the Member Only block and place any blocks inside it. In the block inspector you can pick required products, set a minimum subscription age in days, and write a custom fallback message. Inner blocks are rendered server-side, so non-members never receive the protected markup in the page HTML.

The shortcode

Wrap protected content in the milo_member shortcode. Everything between the opening and closing tags is hidden from non-members.

Attribute Description
product_ids Comma-separated product IDs. Empty means any active subscription qualifies.
message Custom fallback message for this gate.
delay_days Drip delay: only show once the subscription is N days old. 0 disables drip.

Example: [milo_member product_ids=”123,456″ delay_days=”7″]Premium content[/milo_member]

Fallback messages

The shortcode, the block, and whole-post restriction all render the same fallback shape: the message (per-gate if set, otherwise the site default) plus the “Subscribe” button when a Subscribe URL is configured. Excerpts fall back to the plain-text default message.

Developer reference

  • milo_subscriptions_memberships_active_statuses filters the subscription statuses that grant access (default: active, pending-cancel).
  • milo_subscriptions_memberships_has_access filters the final access decision per user, for example to grant access by role.
  • milo_subscriptions_memberships_supported_post_types filters which post types expose the restriction.
  • milo_subscriptions_memberships_hide_from_archives, return false to show restricted posts in archives as teasers.

Billing modes

Requires WooCommerce; access checks run against WooCommerce subscriptions.

Did this page miss something?

Tell us and we rewrite it, usually the same day.

Send a note