Created
January 3, 2020 10:06
-
-
Save femiyb/a85cfcb23b3efd0be5c80588080c19fa to your computer and use it in GitHub Desktop.
Adds category restrictions to pages.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function add_taxonomies_to_pages() | |
{ | |
register_taxonomy_for_object_type( 'post_tag', 'page' ); | |
register_taxonomy_for_object_type( 'category', 'page' ); | |
} | |
add_action( 'init', 'add_taxonomies_to_pages' ); | |
function category_restriction_for_pages( $hasaccess, $mypost, $myuser, $post_membership_levels) | |
{ | |
global $wpdb; | |
if(isset($mypost->post_type) && $mypost->post_type == "page") | |
{ | |
$post_categories = wp_get_post_categories($mypost->ID); | |
if(!$post_categories) | |
{ | |
//just check for entries in the memberships_pages table | |
$sqlQuery = "SELECT m.id, m.name FROM $wpdb->pmpro_memberships_pages mp LEFT JOIN $wpdb->pmpro_membership_levels m ON mp.membership_id = m.id WHERE mp.page_id = '" . $mypost->ID . "'"; | |
} | |
else | |
{ | |
//are any of the post categories associated with membership levels? also check the memberships_pages table | |
$sqlQuery = "(SELECT m.id, m.name FROM $wpdb->pmpro_memberships_categories mc LEFT JOIN $wpdb->pmpro_membership_levels m ON mc.membership_id = m.id WHERE mc.category_id IN(" . implode(",", $post_categories) . ") AND m.id IS NOT NULL) UNION (SELECT m.id, m.name FROM $wpdb->pmpro_memberships_pages mp LEFT JOIN $wpdb->pmpro_membership_levels m ON mp.membership_id = m.id WHERE mp.page_id = '" . $mypost->ID . "')"; | |
} | |
} | |
$post_membership_levels = $wpdb->get_results($sqlQuery); | |
$post_membership_levels_ids = array(); | |
$post_membership_levels_names = array(); | |
if(!$post_membership_levels) | |
{ | |
$hasaccess = true; | |
} | |
else | |
{ | |
//we need to see if the user has access | |
foreach($post_membership_levels as $level) | |
{ | |
$post_membership_levels_ids[] = $level->id; | |
$post_membership_levels_names[] = $level->name; | |
} | |
//levels found. check if this is in a feed or if the current user is in at least one of those membership levels | |
if(is_feed()) | |
{ | |
//always block restricted feeds | |
$hasaccess = false; | |
} | |
elseif(!empty($myuser->ID)) | |
{ | |
$myuser->membership_level = pmpro_getMembershipLevelForUser($myuser->ID); // kept in for legacy filter users below. | |
$myuser->membership_levels = pmpro_getMembershipLevelsForUser($myuser->ID); | |
$mylevelids = array(); | |
foreach($myuser->membership_levels as $curlevel) { | |
$mylevelids[] = $curlevel->id; | |
} | |
if(count($myuser->membership_levels)>0 && count(array_intersect($mylevelids, $post_membership_levels_ids))>0) | |
{ | |
//the users membership id is one that will grant access | |
$hasaccess = true; | |
} | |
else | |
{ | |
//user isn't a member of a level with access | |
$hasaccess = false; | |
} | |
} | |
else | |
{ | |
//user is not logged in and this content requires membership | |
$hasaccess = false; | |
} | |
} | |
return $hasaccess; | |
} | |
add_filter("pmpro_has_membership_access_filter_page", "category_restriction_for_pages", 10, 4); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment