The Content Restriction feature for Easy Digital Downloads adds a section to the edit screen of your posts, pages, custom post types, and bbPress forums / topics called “Content Restriction.” The section allows you to specify the products that customers need to have purchased in order to access the content.
This guide covers both ways to restrict content, the shortcodes available, how restricted content behaves in bbPress, who bypasses restrictions automatically, and how to configure the global settings.
Enabling Content Restriction
Content Restriction is a feature you add to Easy Digital Downloads, available with the Extended pass or higher.
Once you’ve installed and activated the feature under Downloads » Extensions, no extra setup step is needed.
The Content Restriction section appears automatically on the edit screen for posts, pages, custom post types, and bbPress forums and topics, ready to use with either restriction method covered below.
Restricting Content
Once activated, Content Restriction provides two ways to restrict access to content:
- By restricting the whole page or post using the Content Restriction settings within the post or page.
- Using the
[edd_restrict]shortcode.
Content Restriction uses an OR condition for the products, so if you select Product X and Product Y, the content will be accessible to customers that have purchased Product X or whom have purchased Product Y.
You can also restrict content to verified customers of any product in your store by selecting the Any option. Note: This is specific to the shortcode restriction option.
Restricting a Full Page or Post
Restrict the full page or post using the Content Restriction settings below the content editor.
- Select Restrict this page to view options.
- In the Download dropdown, select a specific download or Customers who have purchased any Download.
- If the Download contains variations, you can select a specific variation or All prices in the Download Variation column.
- Additional Downloads can be added using the Add New Download button.
Custom message for this page: The same Content Restriction section includes a rich text editor field for a custom restriction message. Whatever you enter here overrides the global restriction message (set under Settings) for this specific page or post only. Use it when you want different messaging for one piece of content, for example, pointing a visitor toward a specific upgrade path, instead of relying on the same generic message across your whole site.
Global Settings
The global Content Restriction settings are located under Downloads → Settings → Extensions → Content Restriction.

Hiding Menu Items: Content Restriction allows you to hide navigation menu items from customers that have not purchased the necessary products in order to view the content. With this item checked, any navigation menu item that the customer does not have access to will be automatically removed from your site’s menus when that customer is logged in.
This setting only affects navigation menu items, meaning items in menus built under Appearance → Menus that link directly to a restricted page. It doesn’t hide the restricted content itself (that’s controlled by the page or shortcode restriction settings), and it has no effect on links to restricted content that appear anywhere other than a nav menu.
Include Bundled Products: If enabled, products included within a bundle will be considered purchased when determining Content Restriction access rights. This means a customer who bought a bundle containing the required Download gets access to the restricted content, even if they never purchased that Download directly.
Single, Multiple & Any Product Messages: Use these fields to edit the messaging that appears to visitors that don’t have access to restricted content.
Each field supports two placeholders you can use to automatically insert the relevant product name(s) into your message, instead of writing static text:
{product_name}: inserts the name of the single required product.{product_names}: inserts the names of all required products, for content restricted to more than one Download.
For example: “You need to purchase {product_name} to view this content.” will automatically display the correct product name for each restricted page.
Shortcodes
Also included in the plugin is a shortcode that will allow you to restrict portions of content. For example, to restrict a paragraph to only buyers of a specific download, you can do this:
[edd_restrict id="#"]This content is restricted.[/edd_restrict]
The # is replaced with the ID number of the Download product.
The shortcode accepts these parameters:
- id: This is a comma separated list of download ID numbers. Note that you can also put the word “any” to allow any purchase.
- price_id: This is the ID number of the price you want to restrict content to.
- message: This is the text shown to non-buyers.
- class: Adds a custom CSS class to the shortcode’s wrapper div, so you can style restricted sections differently from the rest of your content.
If you want to restrict content to buyers of multiple downloads, you can use the shortcode like this, which will result in the content being restricted to download ID 23 or 254:
[edd_restrict id="23,254"]This content is restricted.[/edd_restrict]
If you would like to restrict a download to a particular price ID, then use:
[edd_restrict id="23" price_id="2"]This content is restricted.[/edd_restrict]
Note: To find the price ID, go to your download and count down from the top of your price options. The first price option is ID=1, the second is ID=2, and so on.
If you would like to restrict a download to any product purchased, do the following:
[edd_restrict id="any"]This content is restricted.[/edd_restrict]
If you want to add a custom class to style the restricted wrapper:
[edd_restrict id="23" class="my-custom-class"]This content is restricted.[/edd_restrict]
There is also a shortcode you can use to show content to someone who has not purchased a specific product. You can use it the same way as the shortcode above, including the class parameter. The shortcode is [edd_cr_no_access] and can be used like this:
[edd_cr_no_access id="#"]Preview of locked content here[/edd_cr_no_access]
Displaying Accessible Restricted Pages After Purchase
When you have posts, pages, or custom post types restricted to products, a list of these pages will be automatically displayed on the purchase confirmation page in order to make it nice and simple for your customers to find the content they have just purchased access to.
You can also add the {page_list} template tag to the email purchase receipt in order to show the list in the emailed receipt.
You can also place the [edd_restricted_pages] shortcode on any page in order to display a list of the posts and pages the logged in customer has access to. It also accepts the same class parameter as the other shortcodes for custom styling.
Here’s what customers see when they visit a page with this shortcode:
- Customers with access: The list is grouped by product. Each purchased product’s name appears as a heading, followed by the list of pages unlocked by that purchase.
- Logged-out visitors: They see the message “You must be logged in to access your purchased content.”
- Logged-in customers with no purchases: They see the message “You have not purchased access to any content.”
Integrations
Recurring Payments
Content Restriction doesn’t have built-in subscription logic of its own. Instead, the Recurring Payments feature integrates with Content Restriction to add subscription support. When Recurring Payments is active, it extends the access check so a customer needs an active subscription, not just a past purchase, to view content restricted to a subscription Download.
See Recurring Payments – Content Restriction Integration for details.
Software Licensing
If the Download has Software Licensing enabled, the Content Restriction settings show an additional Require a valid license key? toggle.
This toggle changes what “access” means for that content:
- Off (default): Access is based on purchase history. Anyone who has ever bought the required Download can view the content, whether or not their license is still active.
- On: Access requires a currently active license key for the required Download. If a customer’s license has expired or been deactivated, they lose access to the restricted content, even though they still show up as having purchased it.
This distinction matters most for content tied to ongoing value, like premium documentation, changelogs, or download links for a licensed product. If you want access to expire when a license lapses, turn this toggle on. If past purchasers should always retain access, leave it off.
When enabled, this doesn’t affect access to other selected Downloads that don’t have Software Licensing active. The requirement only applies per-Download.
bbPress
Content Restriction also works with bbPress forums and topics. The integration goes beyond simply hiding a forum. Depending on where a restricted forum or topic appears, unauthorized visitors will see different behavior:
- Forum list: Restricted forums still appear in the forum list, but the “new topic” and “new reply” forms are hidden for unauthorized users.
- Topic list: Topic lists inside a restricted forum are hidden from unauthorized users.
- Inside a topic: Reply content in a restricted topic is filtered out for unauthorized users.
- Permission messages: Wherever bbPress would normally show its own default permission message, Content Restriction replaces it with your configured restriction message instead.
If you’re setting up Content Restriction on a bbPress forum, it’s worth previewing each of these views (forum list, topic list, inside a topic) as a logged-out visitor and as a customer without the required purchase, so you know exactly what each type of visitor will see.
Who Can Bypass Restrictions
A few groups automatically see restricted content, regardless of purchase history:
- Post authors always see their own restricted content. This prevents authors from accidentally locking themselves out of their own posts or pages.
- Product authors always see content restricted by their own products.
- bbPress moderators bypass all bbPress-related restrictions.
This is especially worth knowing on multi-author sites: if an author reports that they can see content a subscriber says is locked, this bypass behavior is why.
Frequently Asked Questions
How does the {page_list} email template tag order the unlocked pages?
The pages shown when using {page_list} are ordered based on the order that the items were added to the cart by the customer. If there are multiple pages that get unlocked because of a specific product being purchased, the order in which you’ve set up those restrictions is the order in which they are shown from there.
Here’s an example to help illustrate the order:
- You create “Page 1” and set it to be restricted to “Product A” on Jan 1, 2027.
- You create “Page 2” and set it to be restricted to “Product A” on Jan 2, 2027.
- You create “Page 3” and set it to be restricted to “Product B” on Jan 3, 2027.
If the customer puts “Product B” into their cart first, and then adds “Product A” after that, and then completes purchase, the order that {page_list} will show pages in will be:
- Page 3
- Page 1
- Page 2
