Title: Pay For Post with WooCommerce
Author: Matt Pramschufer
Published: <strong>May 16, 2014</strong>
Last modified: January 21, 2026

---

Search plugins

![](https://ps.w.org/woocommerce-pay-per-post/assets/banner-772x250.png?rev=2258172)

![](https://ps.w.org/woocommerce-pay-per-post/assets/icon-256x256.png?rev=2252656)

# Pay For Post with WooCommerce

 By [Matt Pramschufer](https://profiles.wordpress.org/mattpramschufer/)

[Download](https://downloads.wordpress.org/plugin/woocommerce-pay-per-post.3.2.33.zip)

 * [Details](https://twd.wordpress.org/plugins/woocommerce-pay-per-post/#description)
 * [Reviews](https://twd.wordpress.org/plugins/woocommerce-pay-per-post/#reviews)
 *  [Installation](https://twd.wordpress.org/plugins/woocommerce-pay-per-post/#installation)
 * [Development](https://twd.wordpress.org/plugins/woocommerce-pay-per-post/#developers)

 [Support](https://wordpress.org/support/plugin/woocommerce-pay-per-post/)

## Description

Quickly and easily sell access to pages, posts and custom post types through WooCommerce
with Pay For Post with WooCommerce. I originally created this plugin because I looked
everywhere, and I couldn’t find a plugin already out there, free or premium, that
would do the simple fact of selling access to a particular page or post through 
WooCommerce. So I decided to write my own.

#### Requirements

 * WooCommerce version 2.6+ to be installed and active
 * **Guest checkout to be turned OFF**
 * PHP 7.4+ is required

#### How It Works

Getting everything setup will take you less than 5 minutes with three simple steps.

 * **Step 1** Create a product in WooCommerce
 * **Step 2** Create a page or post in WordPress
 * **Step 3** Associate your product with your page using the Pay For Post with 
   WooCommerce meta box.

**It’s that simple.**

> With the Premium version, you have several other options for protecting content
> like, time based, number of page views, etc.

#### How-to Videos

**How-to Install and Configure**
  **How-to Protect a Page/Post**

### Demo

You can view a front-end demo by going to [https://demo.pramadillo.com](https://demo.pramadillo.com)
if you would like to schedule an admin demo please visit [https://pramadillo.com/support](https://pramadillo.com/support)
and select Plugin Admin Demo.

### Features

 * Restrict content from pages, posts and custom post types based on if they have
   purchased a specific WooCommerce product
 * Ability to protect a single post or multiple posts with a single product
 * Ability to protect posts with multiple products
 * Simple to use
 * Uses native WooCommerce functionality to ensure future compatibility
 * Global restricted content message which is used for **all** protected content
 * Utilize any standard WooCommerce shortcodes
 * **PREMIUM ONLY** Ability to override Restricted Content Message on a per page
   basis
 * **PREMIUM ONLY** Delay Restriction – This allows you to delay the paywall from
   appearing for a set amount of time.
 * **PREMIUM ONLY** Page View Restriction – This allows you to limit the number 
   of page views the user who purchased this product has before the paywall reappears.
   Options to specify over a set amount of time or forever.
 * **PREMIUM ONLY** Expiry Restriction – This allows you to specify an expiration
   on this post which would require the user to repurchase the product associated
   with this post.
 * **PREMIUM ONLY** Custom WooCommerce tab on the My Account page to list out all
   purchased content
 * **PREMIUM ONLY** Listing of purchased content on order receipt and order confirmation
   page
 * **PREMIUM ONLY** PolyLang Multiple Language support
 * **PREMIUM ONLY** Priority Support
 * **PREMIUM ONLY** Woo Memberships Support!
 * **PREMIUM ONLY** Woo Subscriptions Support!
 * **PREMIUM ONLY** Easily access all protected content and which users purchased
   them
 * **PREMIUM ONLY** Automatically add a lock icon to all protected posts
 * **PREMIUM ONLY** Show a list of content that gets unlocked by purchased product
   on product page.
 * **PREMIUM ONLY** Full Elementor Support. You can now protect every element differently
   on an Elementor page!

> The premium version of this plugin consists of more advanced features to really
> get the most out of selling your pages and posts! To purchase the premium version
> please visit [https://pramadillo.com/plugins/woocommerce-pay-per-post/](https://pramadillo.com/plugins/woocommerce-pay-per-post/)

#### Shortcodes

    ```
    [woocommerce-payperpost template='purchased']
    ```

This outputs an unordered list of the posts that have been purchased by the current
user logged in.

> There are several additional shortcodes available in the free and premium version.
> Take a look at [https://pramadillo.com/plugins/woocommerce-pay-per-post/](https://pramadillo.com/plugins/woocommerce-pay-per-post/)
> for other available shortcodes.

#### Template Functions

**IMPORTANT** Out of the box this plugin will work with any theme which uses the
standard WordPress function `the_content()`. For those themes that do not utilize`
the_content()` you can use the following static functions in your templates.

    ```
    Woocommerce_Pay_Per_Post_Helper::has_access()
    ```

This checks if the current user has access to the page. It returns true/false

    ```
    Woocommerce_Pay_Per_Post_Helper::get_no_access_content()
    ```

This returns the content specified in the PPP Options.

> For a full example of this take a look at [https://pramadillo.com/plugins/woocommerce-pay-per-post/](https://pramadillo.com/plugins/woocommerce-pay-per-post/)

## Screenshots

[⌊Settings Screen including premium features.⌉⌊Settings Screen including premium
features.⌉[

Settings Screen including premium features.

[⌊Pay For Post with WooCommerce meta box, including premium features.⌉⌊Pay For Post
with WooCommerce meta box, including premium features.⌉[

Pay For Post with WooCommerce meta box, including premium features.

[⌊Protected Page⌉⌊Protected Page⌉[

Protected Page

[⌊Protected Page after checkout⌉⌊Protected Page after checkout⌉[

Protected Page after checkout

[⌊Premium Feature - WooCommerce My Account Tab⌉⌊Premium Feature - WooCommerce My
Account Tab⌉[

Premium Feature – WooCommerce My Account Tab

[⌊Premium Feature - WooCommerce Order Confirmation⌉⌊Premium Feature - WooCommerce
Order Confirmation⌉[

Premium Feature – WooCommerce Order Confirmation

## Installation

 1. Activate the plugin through the `Plugins` menu in WordPress
 2. Browse to Admin->WooCommerce PayPerPost->Settings
 3. Go to Page or Post and you should see a meta box for Pay For Post with WooCommerce.
 4. You can find out more on how to install by visiting [https://pramadillo.com/documentation/installing-woocommerce-pay-per-post/](https://pramadillo.com/documentation/installing-woocommerce-pay-per-post/)

## FAQ

### Do you offer installation and customization services?

Yes, if you need help with installation and/or would like additional customization
work done for your website, you can fill out a request form at [https://pramadillo.com/support](https://pramadillo.com/support)

### I wish this plugin had XZY feature

While I try to do my best to incorporate new features all the time, I implemented
a new Feature Request board located at [https://pramadillo.com/feature-requests](https://pramadillo.com/feature-requests)

### The output from the shortcode to display the products needed to purchase to view content looks weird

This is a default shortcode from WooCommerce. Take a look at https://docs.woocommerce.
com/document/woocommerce-shortcodes/#section-9

Another thing you can try is to set the number of columns on the shortcode to disply
only 1 column to do that you can change your shortcode to be [products ids='{{product_id}}’
cols=’1′]

### Can this plugin work with custom post types?

Yes, this plugin worked with all custom post types. In the settings you can add 
and remove which post types you would like the metabox to show up on.

### How do you link to your post after an order has been placed?

Use the premium version. 🙂 The premium version handles this for you. However, if
you are using the free version what I have done in the past is use the Order Notes
for the product in WooCommerce. So what will happen is after they purchase, on the
Payment Received page they will see the order notes, and they will get sent in the
receipt also.

So for instance, I have a Vimeo video that I embed in a page, on the Vimeo Product
in WooCommerce I add the Password and notes on how to view the video, they gets 
transmitted via email and on the thank you page for the user.

**For PREMIUM users, there is a built-in option to include the post links in the
order email, confirmation screen and on the users My Account page.**

### Do I need to have user accounts turned on?

Yes, in order to keep track of who purchased what, it is a requirement that all 
customers have user accounts/

### Do you offer support?

Yes, I do the absolute best I can to support the free version of the plugin. If 
you upgrade to the premium version you will have priority support.

## Reviews

![](https://secure.gravatar.com/avatar/c93f3c825e795aec2409aff8aef3b672d313124fe446c1ac44301b513154cd71?
s=60&d=retro&r=g)

### 󠀁[not usable unless paid](https://wordpress.org/support/topic/not-usable-unless-paid/)󠁿

 [rjacob999](https://profiles.wordpress.org/rjacob999/) May 13, 2023

the amount of features (paid only) renders it unusable how come I cannot view who
purchases what the customer cannot see what he purchased and call this a FREE working
version! this is a joke/ time-waster!

![](https://secure.gravatar.com/avatar/25b76cbff3710d73aa3e66a91b028696e0aa4b56bf55eb62cc3f07f2236ca54b?
s=60&d=retro&r=g)

### 󠀁[useful plugin](https://wordpress.org/support/topic/useful-plugin-920/)󠁿

 [sorooshmolavi](https://profiles.wordpress.org/sorooshmolavi/) November 28, 2022
1 reply

thank you very much i needed this plugin to sell undownloadable ebooks online

![](https://secure.gravatar.com/avatar/18b7fc5ede7613e26e9c1c8dfef7ae4ecbdc8f937ecff10f4cc942b9badc370f?
s=60&d=retro&r=g)

### 󠀁[Easy to set up and good support](https://wordpress.org/support/topic/easy-to-set-up-and-good-support/)󠁿

 [c_dilla](https://profiles.wordpress.org/c_dilla/) September 16, 2022

I’m using the free version and it’s been easy to set up and it’s doing everything
I need at the moment. When I run into trouble the support has been quick to reply
and solve my issues.

![](https://secure.gravatar.com/avatar/ddfe596424c880c55653087c0304d791a7fa5b44e5ca89b09b32588f5b7d2a3b?
s=60&d=retro&r=g)

### 󠀁[Great support](https://wordpress.org/support/topic/great-support-4161/)󠁿

 [pudel1234](https://profiles.wordpress.org/pudel1234/) March 29, 2022

The plugin was just what I was looking for. Its easy to work with and the support
is great. I have had a couple of set up issues -mostly due to me not reading the
instructions properly 🙂 But I have had prompt replies and good instructions from
the support team.

![](https://secure.gravatar.com/avatar/eacdf85e59ef55499064c526bf8258b646de5c1ac1308b87ad3ef65a07100ab3?
s=60&d=retro&r=g)

### 󠀁[Nice and easy to use](https://wordpress.org/support/topic/nice-and-easy-to-use-91/)󠁿

 [dokunbam](https://profiles.wordpress.org/dokunbam/) November 11, 2021

Just fit to what I needed. kudos

![](https://secure.gravatar.com/avatar/c891e36dd06d2b36001144ff65dfff698cf01e5069b155f995c58ad166e18d9a?
s=60&d=retro&r=g)

### 󠀁[Awesome all the way!](https://wordpress.org/support/topic/awesome-all-the-way/)󠁿

 [pbuser](https://profiles.wordpress.org/pbuser/) September 9, 2021 1 reply

Great plugin, just what I needed. Looking forward to the continued development of
the Elementor integration 🙂 Matt, the developer, is really fast in helping out 
with any issues I’ve come across! 5 stars easy!

 [ Read all 53 reviews ](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/)

## Contributors & Developers

“Pay For Post with WooCommerce” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ Matt Pramschufer ](https://profiles.wordpress.org/mattpramschufer/)
 *   [ Freemius ](https://profiles.wordpress.org/freemius/)

[Translate “Pay For Post with WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/woocommerce-pay-per-post)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/woocommerce-pay-per-post/),
check out the [SVN repository](https://plugins.svn.wordpress.org/woocommerce-pay-per-post/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/woocommerce-pay-per-post/)
by [RSS](https://plugins.trac.wordpress.org/log/woocommerce-pay-per-post/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

=3.2.33=
 * BUG FIX – Fixed fatal error when using the purchased content shortcode
on free version of the plugin.

=3.2.32=
 * SECURITY – Hardened against XSS attacks. * BUG FIX (PREMIUM) – Fixed
issue where canceled WooCommerce Subscriptions sometimes still granted access to
protected content. * BUG FIX (PREMIUM) – Fixed My Account “Purchased Content” endpoint
displaying blank page when shortcode display options were saved with no selections.
The endpoint now defaults to showing both “has access” and “purchased” sections 
when no specific selections are made, preventing empty display. Also improved admin
settings UI to clarify default behavior. * ENHANCEMENT (PREMIUM) – Added show_status_classes
parameter to [wc-pay-for-post-product-unlocks] shortcode for performance optimization.
When set to “false”, the shortcode skips has_access() database queries and omits
locked/unlocked CSS classes. * BUG FIX (PREMIUM) – Fixed {{excerpt}} token in paywall
messages not respecting manually-entered excerpts from Block Editor or Classic Editor.
The token now uses the manual excerpt when available, falling back to auto-generated
excerpt only when none exists. * BUG FIX (PREMIUM) – Fixed issue where on rare occasions
having a subscription product and standard product would cause the post not to be
unprotected on purchase. * UPDATE – Tested up to WordPress 6.9.0 * UPDATE – Tested
up to WooCommerce 10.4.3 * UPDATE (PREMIUM) – Tested with Elementor 3.34.0

=3.2.31=
 * SECURITY – Hardened against XSS attacks * UPDATE – Updated Symfony polyfill
packages to v1.33.0 * UPDATE – Updated Freemius SDK to v2.13.0 * BUG FIX – Fixed
issue where on rare occasions the check for active WooSubscription subscriptions
would fail.

=3.2.30=
 * UPDATE – Updated all third-party libraries. * FIX – Fixed _load_textdomain_just_in_time
notice

=3.2.29=
 * UPDATE – Reverted custom function of customer_has_purchased_product()
and conditionalized it to only be used on WC 9.6.0 and 9.6.1 and to use the native
wc_customer_bought_product() otherwise, now that WC has fixed the bug in 9.6

=3.2.28=
 * UPDATE – Updated all 3rd party vendor libraries * UPDATE – Added custom
function for wc_customer_bought_product() since that function is broke in WooCommerce
version 9.6, 9.6.1, and 9.7.0-pre-release

=3.2.27=
 * BUGFIX – Fixed fatal error on some Elementor integrations.

=3.2.26=
 * UPDATE – Added additional parameters when creating transients to account
for missing attributes. * UPDATE – Updated all third-party libraries

=3.2.25=
 *UPDATE – Added in new filter for wc_pay_per_post_enable_pageview_fix 
which when protected pages view page view protection and setting amount to 1 causes
issues on some installs.

=3.2.24=
 * UPDATE – Added in a filter to disable the last_purchase_date on shortcodes
which is an expensive operation. wc_pay_per_post_enable_last_purchase_date * FEATURE–
WooMemberships, WooSubscriptions and PaidMembershipPro now work with Elementor integration.*
UPDATE – Updated Freemius Library

=3.2.23=
 * BUGFIX – Fixed issue with Remaining shortcode not outputting results
when used inside of Elementor page. * UPDATE – Updated to latest Freemius library*
FEATURE – Added the filter wc_pay_per_post_shortcode_remaining_no_posts for changing
the text when there is no posts remaining to be purchased. * FEATURE – Added new
helper function get_last_purchase_date by post ID. Can be used to sort purchased
products by date of last purchase on the Purchased shortcode template.

=3.2.22=
 * Feature – Added in tools menus * UPDATE – Updated all third party libries

=3.1.21=
 * BUGFIX – Corrected issue if you have homepage set to display latest 
posts with full content, posts would not be protected until you click on them. This
has been fixed. * BUGFIX – Corrected issue with improperly identifying membership
products. * UPDATE – Added more support for AVADA page builder.

=3.1.20=
 * BUGFIX – Fixed issue with inline shortcode not working correctly on 
some installations.

=3.1.19=
 * ROLLBACK – Rolled back refactoring of protection checks as it introduced
more issues than it corrected * UPDATE – Compatibility with new WooCommerce High-
Performance Order Storage (HOPS) was added. * UPDATE – A feature was added to append
body classes to protected posts along with information about whether users have 
access to a set post or not. * UPDATE – A helper function for checking for HOPs 
was added. * UPDATE – Code for Elementor plugin integration was refactored. Adjustments
have been made in the logic for checking the ability to view content and subscription
status. * UPDATE – The function ‘can_user_view_content’ in the WooCommerce plugin
was optimized. It returns directly instead of using a variable. Also, a check for
posts containing Elementor Widgets was added. * UPDATE – The code was updated and
refactored, including some changes to CSS for Elementor integration, streamlining
logic in ‘check_if_protected’ function, and using Carbon::now() instead of current_time(‘
timestamp’) in a method in ‘class-woocommerce-pay-per-post-helper.php’. * UPDATE–
Elementor pages now show up in the purchased content shortcode * UPDATE – Updated
all third-party libraries to latest versions * BUGFIX – Fixed issue with PHP Notice
displaying for WooMemberships. * BUGFIX – Fixed issue where if checkbox to allow
admins to view content was checked, admins couldn’t view elementor protected widgets.

#### 3.1.18

 * BUGFIX – Updated logic for delay protection which would sometimes not show content
   on certain installs.
 * BUGFIX – Added in helper function to check to see if REST/Admin request when 
   saving from Block Editor

#### 3.1.17

 * UPDATE – Changed the filter name from wc_pay_per_post_hide_item_meta to wc_pay_per_post_show_item_meta
   for easier readability
 * BUGFIX – Fixed bug which shortcodes with different parameters would overwrite
   the transient. Unique transients are now in place for all variations of shortcode
   attributes.
 * BUGFIX – Updated logic which would cause specific installs it WooSubscriptions
   to allow access to content after a subscription has expired.
 * UPDATE – completely reworked all of the protection checks. Please double check
   your site to ensure everything works correctly.

#### 3.1.16

 * HOTFIX – Fixed issue where protected content does not show up in email and order
   confirmation since new filter was added.

#### 3.1.15

 * BUGFIX – Fixed a bug which protected content would still be visible when subscription
   expires for some installs.
 * BUGFIX – Fixed a bug that wouldn’t allow admins to view protected content if 
   content was expired.
 * BUGFIX – Fixed issue where the users page views on user profile wouldn’t show
   up in certain circumstances.
 * UPDATE – Reworked logic and variables to make it easier to understand

#### 3.1.14

 * FEATURE – Added new filter to easily disable the purchased content from being
   output in checkout confirmation and email. wc_pay_per_post_hide_item_meta

#### 3.1.13

 * HOTFIX – Fixes fatal error that happens on some installs with colliding vendor
   packages.

#### 3.1.12

 * BUGFIX – Addressed issue where purchased content link sometimes still showed 
   up in order email when cancelling order.
 * BUGFIX – Fixed issue where on specific installs having a subscription product
   and standard product would cause the post not to be unprotected on purchase.
 * BUGFIX – Fixed PHP Warning message
 * UPDATE – Prefixed all namespaces to prevent unwanted vendor collisions
 * FEATURE – Compatibility with new WooCommerce High-Performance Order Storage (
   HOPS)
 * FEATURE – Body classes are now added to all protected posts ‘ppp-protected’, 
   and ‘ppp-has-access’ if they have access and ‘ppp-has-no-access’ if they do not
   have access

#### 3.1.11

 * UPDATE – Updated third-party dependencies to latest versions (Freemius 2.5.9 
   to 2.5.10, Carbon 2.67.0 to 2.68.1)

#### 3.1.10

 * UPDATE – Updated third-party dependencies to latest versions (Freemius 2.5.7 
   to 2.5.9, Carbon 2.66.0 to 2.67.0)
 * UPDATE – Fixed PHP Warning with Elementor integration
 * UPDATE – Confirmed Working with WC 7.8x, El 3.14.x, El Pro 3.14.x

#### 3.1.9

 * UPDATE – Reworked code to check if a subscription product was purchased.
 * UPDATE – Corrected multiple typos and issues found in Phpcs
 * UPDATE – Confirmed working with latest WP and WC
 * UPDATE – Updated third-party dependencies
 * BUG FIX – Fixed issue which access was still granted if a subscription was canceled
   on certain installs.
 * BUG FIX – Fixed bug where filters for showing shortcodes on my account pages 
   were incorrectly being called.
 * BUG FIX – Fixed bug where comments would still show but the ability to post new
   comments was not shown. Now comments are hidden.

#### 3.1.8

 * UPDATE – Block editor integration now follows post type and roles set in settings
   and filters.
 * UPDATE – Added in warning for when utilizing block editor on custom post types
   that do not support custom fields
 * BUG FIX – Fixed issue with inline shortcode protecting entire page.

#### 3.1.7

 * UPDATE – Set defaults for new checkboxes in settings screen.
 * UPDATE – Added in notice on admin page for Custom Post Types, that any Custom
   Post type needs to support custom fields in order to save from the Block Editor.
 * UPDATE – Added in CSS classes to be able to target shortcode h3 tags class=”wc-
   ppp-my-account-shortcode-heading”
 * UPDATE – Added in setting to disable new Block Editor integration.

#### 3.1.6

 * FEATURE – Fully integrated Block Editor metabox. The metabox is now in the sidebar
   rather than at the bottom of the page.
 * FEATURE – Added in filter wc_pay_for_post_the_content_priority which you can 
   set the priority of when the protection check on the_content filter is fired.
 * FEATURE – Added in filter wc_pay_for_post_is_frontend_edit that allows you to
   define if the post is being edited in frontend, instead of backend. This is to
   assist with other page builders.
 * UPDATE – Updated the filter priority for the_content filter from 10 to 99
 * UPDATE – Updated logic for detecting protected posts. This should help with other
   page builder integrations.
 * UPDATE – Updated third-party libraries to the latest versions.
 * UPDATE – Updated Debug Log, now requires you to add ?wc-ppp-debug=true to your
   URL to log to debug file. This will make it much easier to debug on a live site.
 * UPDATE – Transients for shortcodes will automatically clear after post edit. 
   Can be disabled using filter wc_pay_per_post_clear_transients_on_post_edit
 * BUGFIX – Fix for entire page priority protection over elementor widget protection.
 * BUGFIX – Fix for paywall in Elementor protected widgets.
 * BUGFIX – Fix for DIVI builder integration.
 * BUGFIX – Fix for Beaver builder integration.

#### 3.1.5

 * FEATURE – Added new filter wc_pay_for_post_show_paywall_in_archives which allows
   you to control if content get protected in archives showing full post content.
   Defaults to true;
 * BUG FIX – Fixed bug in premium version which viewing protected content from admin
   and only showing the admin user as the customer.
 * BUG FIX – Fixed bug which was causing some page builders not to render protected
   content correctly.
 * UPDATE – Updated Elementor integration to now clearly show which elements are
   protected by outlining them in red.
 * UPDATE – Added Filter wc_pay_for_post_show_paywall_in_archives to indicate if
   paywall should show in archives or not, default is true

#### 3.1.4

 * HOTFIX – Bug with is_protected protection check returning false in some instances
   when it should be true.

#### 3.1.3

 * BUG FIX – Fixed PHP notices in error_log for when no products associated with
   post.
 * UPDATE – Updated logic for when protected posts are being pulled in via third
   party shortcode to allow protection settings to be checked for embedded posts.

#### 3.1.2

 * BUG FIX – Addressed bug with custom post types and standard protection
 * BUG FIX – Addressed bug with has_access and purchased shortcodes not displaying
   correct products in some cases.
 * BUG FIX – Removed Premium name from Free version

#### 3.1.1

 * BUG FIX – Fixed bug in premium version which expiration protection was throwing
   fatal error.

#### 3.1.0

 * UPDATE – Updated Freemius, Monolog and Carbon libraries to the latest versions
 * UPDATE – Confirmed working with WooCommerce 6.8+, WordPress 6.0+, and (Pro Version
   of pay for post) Elementor 3.7.5
 * UPDATE – Significant refactoring to improve overall performance.
 * UPDATE – Performance updates for sites with heavy Elementor usage.
 * UPDATE – Changed default transient expiration time from 1 day to 1 hour
 * UPDATE – Added in a lot more debugging logs for when investigating issues
 * UPDATE – Elementor support for Pro users now can easily see which elements are
   protected

#### 3.0.10

 * BUG FIX – Fixed issue with extreme slowness with WooSubscriptions running
 * UPDATE – Added compatibility filter for page builders to disable plugin programmatically
 * BUG FIX – Fixed shortcode ordering, was using post_date instead of just date
 * FEATURE – Added in ability to bypass transients on shortcodes using flag `bypass_transients
   ='true'`
 * BUG FIX – Adjusted shortcode flags to be case-insensitive

#### 3.0.9

 * UPDATE – Updated all third party SDKs
 * UPDATE – Updated Elementor integration to account for meta_box_roles filter.
 * BUG FIX – Corrected issue with pagination and deleting page views on user profiles
 * BUG FIX – Fixed PHP Notice Error for undefined transient variable
 * BUG FIX – Fixed PHP error when viewing protected content panel and elementor 
   protection
 * UPDATE – Updated translation POT files

#### 3.0.7

 * UPDATE – Accounted for the use of tag AND category filters in shortcodes with
   new transient caching.

#### 3.0.6

 * BUGFIX – Reworked how transients are stored to account for premium shortcode 
   usage
 * BUGFIX – Corrected PHP warnings with array vs string
 * FEATURE – Added in transient clear/refresh to debug page
 * UPDATE – Updated all third-party libraries

#### 3.0.5

 * UPDATE – Added in additional logic to enhance performance on Elementor integrations
 * UPDATE – Reworked admin logic to improve performance
 * UPDATE – Pay for Post pages are now stored in a transient for faster lookups 
   with a 1 day cache
 * UPDATE – Added in new filter called wc_pay_per_post_posts_transient_time which
   can be used to set the cache expiration
 * UPDATE – Added in more debugging when debug mode is enabled

#### 3.0.4

 * BUGFIX – Fixed PHP non-countable Warning
 * BUGFIX – Reworked how product_ids are found in Elementor element data
 * BUGFIX – Fixed bug which would show not purchased when the user has purchased.

#### 3.0.3

 * BUGFIX – Fixed tricky bug with Elementor that could have improperly marked a 
   page as protected
 * UPDATE – Added in a bunch more debug logging around Elementor

#### 3.0.2

 * BUGFIX – Fixed PHP Warning when activating with Elementor pages
 * BUGFIX – Made sure protection only happens on specified post types set in admin.
 * BUGFIX – Fixed issue with Elementor protecting entire page.
 * UPDATE – added in filter wc_pay_per_post_force_elementor_full_page_protection
   to allow people to still use full page elementor protection if necessary. The
   default is now false.

#### 3.0.1

 * BUGFIX – Fixed noInspection PHPInclude text from being displayed in admin.

#### 3.0.0

 * UPDATE – PHP Version 7.2+ is now required. This could be a breaking change for
   some people. Upgrade PHP to latest version.
 * UPDATE – New filter wc_pay_per_post_all_product_args to allow for filtering what
   products show up in the product meta box
 * UPDATE – New filter wc_pay_per_post_paywall_icon to allow you change the icon
   used for locked posts.
 * UPDATE – Reworked the is_subscriber() function to be more performant, thanks @
   Konrad
 * UPDATE – Updated Select2 and DataTables library
 * UPDATE – New shortcode wc_pay_per_post_apply_the_content_filter_to_inline_shortcode
   to disable the_content filter from being applied to inline-shortcode output
 * UPDATE – Updated default protected content message to include the column parameter[
   products ids='{{product_id}}’ columns=’1′]
 * PREMIUM FEATURE – All new Elementor integration! You can now protect any block
   in Elementor!
 * PREMIUM UPDATE – Completely rewrote the expiration protection to upgrade to Carbon
   2.0!
 * PREMIUM UPDATE – Made the shortcode [wc-pay-for-post-product-unlocks] able to
   handle variable products
 * PREMIUM UPDATE – Now possible to associated VARIABLE subscription products with
   posts.
 * PREMIUM UPDATE – Added in new filter wc_pay_per_post_allowed_roles_for_user_profile_edit
   to allow to control which roles can see user edit page views
 * BUG FIX – Fixed logic relating to multiple page views on page view tracking on
   some themes
 * BUG FIX – Fixed issue which displaying the shortcode has_access would actually
   count a pageview
 * BUG FIX – Fixed bug when wanting to protect whole page in Elementor
 * BUG FIX – Updated premium code to remove php warnings when viewing protected 
   content admin page.
 * BUG FIX – Added in fallback for when the last purchase date can not be found.
 * BUG FIX – Fixed French translation on default restricted content shortcode.
 * BUG FIX – Corrected issue in shortcode-all file which incorrectly referenced 
   the post object as an array
 * BUG FIX – Fixed issue which if using page view protection and the order_date 
   was not found, access to content could be had.
 * BUG FIX – Fixed PHP Notice when viewing user profile and there was no page views.
 * BUG FIX – Correct URL for adding new product link if using a wordpress install
   in sub folder
 * BUG FIX – Added in logic to account for the pending-cancel status for woo subscriptions
 * BUG FIX – Corrected issue with 500 error when using the REST API to pull products
   WHILE using the product unlocks shortcode.
 * BUG FIX – Addressed issue with incorrect product_id being used when browsing 
   archive views and using full content
 * BUG FIX – Updated translation for shortcode on French .po file
 * BUG FIX – Updated expiration-status template to account for when a user has access
   and there is no actual purchase date

#### 2.6.8

 * UPDATE – Confirmed working with WC 4.7x
 * BUGFIX – Fixed bug with inline shortcode and elementor displaying whole page 
   content in editor
 * BUGFIX – Fixed PHP Warning when saving post protected by pay for post

#### 2.6.7

 * BUG FIX – Fixed javascript error due to missing DataTables.

#### 2.6.6

 * UPDATE – Updated the filter variables for wc_pay_per_post_hide_item_meta_in_email
   to remove php warnings

#### 2.6.5

 * BUG FIX – Version number bump, for some reason several users are not getting 
   the full release for 2.6.4 so I am bumping the version number to force the new
   download.

#### 2.6.4

 * PREMIUM FEATURE – Added in a Purchased Content tab to admin to show protected
   pages and what users purchased them. This is still in active development!
 * PREMIUM FEATURE – Added in new premium shortcode wc-pay-for-post-product-unlocks
   which you can embed on your product page to show what content purchasing this
   product unlocks.
 * PREMIUM FEATURE – Added in new option in settings for displaying a lock icon 
   next to protected post titles
 * BUG FIX – Fixed long standing bug with expiration protection products not showing
   up in has access shortcode!!!
 * UPDATE – Added the class locked or unlocked to the shortcode list for ALL Protected
   Content
 * UPDATE – Ensured compatibility with WooCommerce 4.6.x
 * UPDATE – Updated to latest version of DataTables
 * UPDATE – Updated to latest version of Freemius SDK

#### 2.6.3

 * UPDATE – With the change of the purchased shortcode, the tab in woocommerce my
   account has now changed. It will now display both protected and has access products.
   With this we have added in additonal filters.
 * NEW FILTER – wc_pay_per_post_my_account_show_has_access – return true/false for
   displaying the has access shortcode on tab
 * NEW FILTER – wc_pay_per_post_my_account_show_purchased – return true/false for
   displaying the has purchased shortcode on tab
 * NEW FILTER – wc_pay_per_post_my_account_has_access_title – Default is “Content
   you have access to”
 * NEW FILTER – wc_pay_per_post_my_account_purchased_title – Default is “Content
   purchased”

#### 2.6.2

 * IMPORTANT – Changed the way the shortcode PURCHASED works. The shortcode now 
   returns all purchased products, not just ones the user has access to.
 * BUGFIX – Fixed issue with orders in the processing state when using Expiration
   protection was not getting the last order date.
 * BUGFIX – Fixed issue with shortcode not accepting multiple product ids.
 * BUGFIX – Fixed issue with inline shortcode returning content that did not process
   shortcodes.
 * UPDATE – Confirmed working for WooCommerce 4.5.x
 * UPDATE – Added video library to Getting Started page.
 * FEATURE – Added in new shortcode for HAS ACCESS which is what the old PURCHASED
   shortcode was. You can now have two shortcodes, one to show if the user has access
   to posts, and one to show if they purchased the product.
 * FEATURE – Added in new filters for no posts short code messages. wc_pay_per_post_shortcode_has_access_no_posts,
   wc_pay_per_post_shortcode_purchased_no_posts
 * FEATURE – Added in admin notification if debug mode is running in production.

#### 2.6.1

 * HOTFIX – Duplicate filter name for wc_pay_per_post_allowed_roles, changed the
   newly released filter to be wc_pay_per_post_allowed_roles_for_meta_box

#### 2.6.0

 * FEATURE – Added in filter wc_pay_per_post_allowed_roles_for_meta_box which allows
   users to limit the meta box from displaying to specific roles.
 * UPDATE – Confirmed working with WordPress 5.5
 * UPDATE – Confirmed everything works with WooCommerce 4.4.x
 * UPDATE – Updated to latest Freemius package
 * BUGFIX – On activation of premium plugin, the pageviews table sometimes would
   not get created due to foreign key restraints. We have a fallback in place now
   for this.
 * BUGFIX – Fixed PHP Warning on activation
 * BUGFIX – Fixed PHP Warnings on Debug Page.

#### 2.5.9

 * UPDATE – Confirmed everything works with WooCommerce 4.3.1
 * FEATURE – Added in crude debug log viewer on debug page.
 * FEATURE – Implemented new template engine to allow for overwriting of the template
   through the wc_pay_for_post_locate_template filter.
 * PREMIUM FEATURE – Added in two new shortcodes for [wc-pay-for-post-status template
   =”expiration-status”] and [wc-pay-for-post-status template=”pageview-status”]

#### 2.5.8

 * UPDATE – Confirmed everything works with WooCommerce 4.2.2
 * UPDATE – Wrapped Paywall content in

<

div class=”wc_ppp_paywall”> for easier styling
 * FEATURE – Added a css class to
paywall `wc_ppp_paywall` to make it easier to style * FEATURE – Added the ability
to protect attachment pages * PREMIUM FEATURE – Inline Shortcodes for protecting
content! BETA You can now protect multiple pieces of content using the shortcode[
wc-pay-for-post-inline][/wc-pay-for-post-inline]!!! * PREMIUM FEATURE – Added new
filter wc_pay_per_post_modify_excerpt for modifying excerpt when using {{excerpt}}*
PREMIUM FEATURE – Added in action wc_pay_per_post_page_view_threshold_reached for
when users page views reach 3 page views left * PREMIUM FEATURE – Added in filter
wc_pay_per_post_page_view_action_threshold to allow to override page_view threshold
action * PREMIUM FEATURE – Added in filter wc_pay_for_post_allowed_roles to allow
specific user roles to bypass paywall * PREMIUM FEATURE – Added in filter wc_pay_for_post_show_warnings_position
to allow to control the position of the warning box either TOP of post or BOTTOM
of post

#### 2.5.7

 * BUGFIX – Correct javascript error when multiple versions of Select2 library are
   running

#### 2.5.6

 * BUGFIX – Corrected PHP 7.4 error when using template tags
 * UPDATE – Added in new filter wc_pay_per_post_override_purchase_date_sql to override
   the purchase date SQL.

#### 2.5.5

 * UPDATE – Added filter wc_pay_per_post_disable_in_the_loop to account for some
   themes that do not use the_loop
 * BUGFIX – Corrected issue of purchased content links not showing up in order emails
   if using a variable product.

#### 2.5.4

 * PERFORMANCE – Refactored function that checks if post is protected to be 2x faster.
 * BUGFIX – Applied fix to account for themes that call the_content filter multiple
   times on page which would cause the pageview counter to fire multiple times. 
   Thanks @Elio for the assist!
 * PREMIUM FEATURE – Added in a new short tag {{excerpt}} which will automatically
   pull the excerpt from the current post. This can be used in the global Restricted
   Content Message or in the Override Restricted Content Section.

#### 2.5.3

 * UPDATE – Exposed ability to turn on or off tracking at a code level.
 * UPDATE – Updated all vendor files
 * BUGFIX – Addressed bug for tracking page views. Previously if you had page view
   to be set to one, it would actually allow two page views
 * BUGFIX – Addressed bug for pageview tracking which used a users pageview when
   firing the purchased_content shortcode
 * REMOVAL – Removed old database upgrade functions.

#### 2.5.2

 * BUGFIX – Fixed issue introduced in 2.5.1 with saving product_ids not storing 
   correctly in database.
 * SECURITY FIX – Implemented custom sanitization function for product_ids array.

#### 2.5.1

 * PREMIUM FEATURE – Added in support for Paid Memberships Pro!
 * UPDATE – Removed all logos of WooCommerce in banner images and logos
 * UPDATE – Corrected two instances to properly sanitize data before saving in database.

#### 2.5.0

 * UPDATE – Changed name of plugin for legal reasons. 🙁 The name going forward 
   will be Pay For Post with WooCommerce

#### 2.4.15

 * FEATURE – Added new filter wc_pay_per_post_woocommerce_email_args
 * FEATURE – Added new filter wc_pay_per_post_hide_delay_restricted_posts_when_paywall_should_not_be_shown
 * SECURITY FIX – Added esc_html() to page title that was outputted and not escaped.
 * UPDATE – Updated to latest version of Freemius SDK

#### 2.4.14

 * FEATURE – Added ability to delete log file from settings page.
 * BUG FIX – Fixed CSS issue with badge icon

#### 2.4.13

 * BUG FIX – Fixed issue with readme.txt VS README.txt on what’s new page
 * UPDATE – Accounted for post_meta being stored as boolean rather than yes/no on
   woocommerce items.

#### 2.4.12

 * BUG FIX – Removed the +1 from premium page view counter
 * BUG FIX – Excluded shortcodes from processing in the admin when using builders
   like Gutenberg

#### 2.4.11

 * BUG FIX – Addressed wc_pay_per_post_hide_item_meta_in_email filter bug which 
   stopped working with 2.4 release.

#### 2.4.10

 * BUG FIX – Correctly Addressed the issue when free version users had WooSubscriptions
   or WooMemberships active, and not utilizing premium version.

#### 2.4.9

 * BUG FIX – Addressed issue when free version users had WooSubscriptions or WooMemberships
   active

#### 2.4.8

 * BUG FIX – Corrected issue when Debug Mode was enabled it would throw a fatal 
   error in Free Version
 * BUG FIX – Corrected issue of __premium_only functions not being found in free
   version.

#### 2.4.7

 * Public 2.4x Release!
 * UPDATE – Complete rewrite of majority of code base to put added emphasis on scalability!
 * UPDATE – Added in Monolog Logger for more robust debugging
 * UPDATE – Updated to latest Freemius SDK for a wide range of account related updates
 * UPDATE – Made the navigation menus a bit more friendly.
 * UPDATE – Changed the logic behind has_purchased function to be has_access instead
   to account for Premium Membership protection.
 * PREMIUM FEATURE – Added in support for Woo Memberships!!
 * PREMIUM FEATURE – Added in support for Woo Subscriptions!!
 * PREMIUM FEATURE – Added in javascript page refresh for page expiration protection
 * PREMIUM FEATURE – Filter added wc_pay_per_post_enable_javascript_expiration_refresh
   to disable javascript refresh protection
 * PREMIUM UPDATE – Added in conditional logic for expiration-status partial to 
   account for admins that have access.
 * BUG FIX – Corrected bug which would cause admin screen to refresh when viewing
   an expired post – Thanks @ryan!
 * BUG FIX – Corrected bug which would improperly set the expiration status of the
   post – Thanks @ryan!
 * BUG FIX – Corrected issue when protecting posts with membership they would not
   show up in purchased shortcode – Thanks @ryan!
 * BUG FIX – Fixed issue with purchased and remaining shortcode which would not 
   display standard protection products
 * BUG FIX – If setting enabled to allow admin’s to view protected post content,
   then do not enforce the javascript page reloading.
 * BUG FIX – Corrected issue with expiration protection for if last purchase date
   was empty it would allow access to protected content. – Thanks @ryan!

#### 2.4.6

 * BUG FIX – Corrected issue with expiration protection for if last purchase date
   was empty it would allow access to protected content. – Thanks @ryan!
 * UPDATE – Added in conditional logic for expiration-status partial to account 
   for admins that have access.

#### 2.4.5

 * BUG FIX – If setting enabled to allow admin’s to view protected post content,
   then do not enforce the javascript page reloading.

#### 2.4.4

 * BUG FIX – Fixed issue with purchased and remaining shortcode which would not 
   display standard protection products
 * FEATURE – Filter added wc_pay_per_post_enable_javascript_expiration_refresh to
   disable javascript refresh protection

#### 2.4.3

 * BUG FIX – Corrected issue when protecting posts with membership they would not
   show up in purchased shortcode – Thanks @ryan!
 * UPDATE – Changed the logic behind has_purchased function to be has_access instead
   to account for Membership protection.

#### 2.4.2

 * BUG FIX – Corrected bug which would cause admin screen to refresh when viewing
   an expired post – Thanks @ryan!
 * BUG FIX – Corrected bug which would improperly set the expiration status of the
   post – Thanks @ryan!

#### 2.4.1

 * PREMIUM FEATURED – Added in support for Woo Memberships!!
 * PREMIUM FEATURED – Added in support for Woo Subscriptions!!
 * PREMIUM FEATURED – Added in javascript page refresh for page expiration protection
 * UPDATE – Complete rewrite of majority of code base to put added emphasis on scalability
 * UPDATE – Added in Monolog Logger for more robust debugging
 * UPDATE – Updated to latest Freemius SDK for a wide range of account related updates
 * UPDATE – Made the navigation menus a bit more friendly.

#### 2.3.2

 * BUGFIX – Fixed issue with template replacements not working in 2.3.1

#### 2.3.1

 * FEATURE – Added in new filter to hide the purchased content links from woocommerce
   receipt emails.
 * UPDATE – Refactored a ton of code for performance increases!
 * BUGFIX – Updated links in settings page to work with installs that are not in
   the root directory.

#### 2.3.0

 * FEATURE – Added in Debug tools to check if page view tables are created, and 
   if WooCommerce products are created.
 * FEATURE – Added in new shortcode parameter for the purchased shortcode, to allow
   to group by product ids!
 * UPDATE – Added in timezone locale to date of last purchase for page view protection
 * UPDATE – Added in WordPress Version check …

## Commercial plugin

This plugin is free but offers additional paid commercial upgrades or support. [View support](https://pramadillo.com/support/)

## Meta

 *  Version **3.2.33**
 *  Last updated **6 months ago**
 *  Active installations **1,000+**
 *  WordPress version ** 3.8 or higher **
 *  Tested up to **6.9.0**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/woocommerce-pay-per-post/)
 * Tags
 * [sell content](https://twd.wordpress.org/plugins/tags/sell-content/)[woocommerce](https://twd.wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://twd.wordpress.org/plugins/woocommerce-pay-per-post/advanced/)

## Ratings

 4.7 out of 5 stars.

 *  [  49 5-star reviews     ](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/?filter=2)
 *  [  4 1-star reviews     ](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/woocommerce-pay-per-post/reviews/)

## Contributors

 *   [ Matt Pramschufer ](https://profiles.wordpress.org/mattpramschufer/)
 *   [ Freemius ](https://profiles.wordpress.org/freemius/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/woocommerce-pay-per-post/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mattpram%40gmail%2ecom)