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
- Install and activate the free Milo Subscriptions plugin (WooCommerce is required too).
- Upload and activate Milo Memberships (Plugins → Add New → Upload).
- 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.