Skip to content

Instantly share code, notes, and snippets.

@dwanjuki
Forked from andrewlimaza/restrict-cpt-cat-pmpro.php
Last active October 16, 2023 15:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dwanjuki/0fa6a7a126735e8c10704c162cad1e3a to your computer and use it in GitHub Desktop.
Save dwanjuki/0fa6a7a126735e8c10704c162cad1e3a to your computer and use it in GitHub Desktop.
Restrict pages by category
<?php
/**
* Restricts pages based on category.
* Add categories to pages via a plugin: https://wordpress.org/plugins/pages-with-category-and-tag/
* Add this code to your PMPro Customizations Plugin - https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
*/
function my_restrict_page_categories( $hasaccess, $post, $user, $post_membership_levels ) {
global $wpdb;
if ( ! $hasaccess ) {
return $hasaccess;
}
$post_categories = wp_get_post_categories( $post->ID );
if ( ! empty( $post_categories ) ) {
$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 = '" . $post->ID . "')";
$results = $wpdb->get_results( $sqlQuery );
if ( ! $results ) {
$hasaccess = true;
}
// if the user isn't logged-in, restrict content.
if ( !is_user_logged_in() ) {
$hasaccess = false;
}
$required_levels = array();
foreach ( $results as $level ) {
$required_levels[] = $level->id;
}
if ( ! empty( $user ) ) {
$user_levels = pmpro_getMembershipLevelsForUser($user->ID);
if($user_levels) {
$my_levels = array();
foreach($user_levels as $curlevel) {
$my_levels[] = $curlevel->id;
}
if( count( array_intersect( $my_levels, $required_levels ) ) > 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;
}
}
}
}
return $hasaccess;
}
add_filter( 'pmpro_has_membership_access_filter_page', 'my_restrict_page_categories', 10, 4 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment