Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save andrewlimaza/fcc6139ac93c67775e3ee3f098f0ea03 to your computer and use it in GitHub Desktop.
Save andrewlimaza/fcc6139ac93c67775e3ee3f098f0ea03 to your computer and use it in GitHub Desktop.
Paid Memberships Pro: Hide Old Posts From New Members
/*
This code will create a content filter for all pages and posts to remove access to posts that were published before a member's join date. Only posts or pages which require membership will be hidden. Note that pages and posts that require membership will still be hidden from non-members regardless of the publish date.
The params passed are:
$hasaccess - (bool) what PMPro thinks about whether the user has access
$thepost - (post object) the post being checked, usually the current post
$theuser - (user object) the user being checked, usually the current user
$post_membership_levels - (array of levels) the levels this post requires (if any)
*/
add_filter("pmpro_has_membership_access_filter", "hide_old_posts_from_members", 10, 4);
function hide_old_posts_from_members($hasaccess, $thepost, $theuser, $post_membership_levels)
{
$category = get_the_category( $thepost->ID );
// Bail if the post is of a certain category. Change to category you would like to unlock posts for.
if ( $category[0]->slug == 'uncategorized' ) {
return $hasaccess;
}
// If the user has level 3 access, do not run any further checks.
if ( pmpro_hasMembershipLevel( array( 3 ) ) ) {
return $hasaccess;
}
global $wpdb;
//if PMPro says false already, return false
if(!$hasaccess)
return false;
//if the post doesn't require membership, allow access
if(!$post_membership_levels)
return true;
//okay, this post requires membership. start by getting the user's startdate
$startdate = pmpro_getMemberStartdate($theuser->ID);
//no startdate? return false
if(empty($startdate))
return false;
//if the startdate is before the post date, return true
if($startdate < strtotime($thepost->post_date))
return true;
else
{
//in this case we want to also tweak the message shown
add_filter("pmpro_non_member_text_filter", "swap_old_posts_member_text");
return false;
}
}
function swap_old_posts_member_text($s)
{
$s = "This content was published before your membership started.";
return $s;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment