Skip to content

Instantly share code, notes, and snippets.

@messica
Last active August 29, 2015 13:59
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 messica/10994504 to your computer and use it in GitHub Desktop.
Save messica/10994504 to your computer and use it in GitHub Desktop.
Hide Menu Items Based on Membership Categories
<?php
/* Hide Menu Items Based on Membership Categories */
function my_wp_nav_menu_objects($sorted_menu_items, $args)
{
global $wpdb;
//only check this theme location
if ($args->theme_location != 'secondary-menu')
return $sorted_menu_items;
global $current_user;
$user_level = pmpro_getMembershipLevelForUser($current_user->ID);
//get all cats users has access to via membership
$member_categories = pmpro_getMembershipCategories($user_level->ID);
//get public cats that aren't locked down
$public_categories = $wpdb->get_col("SELECT tt.term_taxonomy_id FROM $wpdb->term_taxonomy tt LEFT JOIN $wpdb->pmpro_memberships_categories mc ON tt.term_taxonomy_id = mc.category_id WHERE tt.taxonomy = 'category' AND mc.membership_id IS NULL");
//merge
$visible_categories = array_merge($member_categories, $public_categories);
//check all menu items. if cat items, check for access
foreach($sorted_menu_items as $item_key => $item ) {
//only check categories
if($item->object != "category")
continue;
if(!in_array($item->object_id, $visible_categories)) {
unset($sorted_menu_items[$item_key]);
continue;
}
}
return $sorted_menu_items;
}
add_filter('wp_nav_menu_objects', 'my_wp_nav_menu_objects', 10, 2);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment