Example #1
0
function pmpro_set_current_user()
{
    //this code runs at the beginning of the plugin
    global $current_user, $wpdb;
    get_currentuserinfo();
    $id = intval($current_user->ID);
    if ($id) {
        $current_user->membership_level = pmpro_getMembershipLevelForUser($current_user->ID);
        if (!empty($current_user->membership_level)) {
            $current_user->membership_level->categories = pmpro_getMembershipCategories($current_user->membership_level->ID);
        }
        $current_user->membership_levels = pmpro_getMembershipLevelsForUser($current_user->ID);
    }
    //hiding ads?
    $hideads = pmpro_getOption("hideads");
    $hideadslevels = pmpro_getOption("hideadslevels");
    if (!is_array($hideadslevels)) {
        $hideadslevels = explode(",", $hideadslevels);
    }
    if ($hideads == 1 && pmpro_hasMembershipLevel() || $hideads == 2 && pmpro_hasMembershipLevel($hideadslevels)) {
        //disable ads in ezAdsense
        if (class_exists("ezAdSense")) {
            global $ezCount, $urCount;
            $ezCount = 100;
            $urCount = 100;
        }
        //disable ads in Easy Adsense (newer versions)
        if (class_exists("EzAdSense")) {
            global $ezAdSense;
            $ezAdSense->ezCount = 100;
            $ezAdSense->urCount = 100;
        }
        //set a global variable to hide ads
        global $pmpro_display_ads;
        $pmpro_display_ads = false;
    } else {
        global $pmpro_display_ads;
        $pmpro_display_ads = true;
    }
    do_action("pmpro_after_set_current_user");
}
function pmpro_search_filter($query)
{
    global $current_user, $wpdb, $pmpro_pages;
    //hide pmpro pages from search results
    if (!$query->is_admin && $query->is_search && empty($query->query['post_parent'])) {
        if (empty($query->query_vars['post_parent'])) {
            //avoiding post_parent queries for now
            $query->set('post__not_in', $pmpro_pages);
        }
        $query->set('post__not_in', $pmpro_pages);
        // id of page or post
    }
    //hide member pages from non-members (make sure they aren't hidden from members)
    if (!$query->is_admin && !$query->is_singular && empty($query->query['post_parent']) && (empty($query->query_vars['post_type']) || in_array($query->query_vars['post_type'], apply_filters('pmpro_search_filter_post_types', array("page", "post"))))) {
        //get page ids that are in my levels
        $levels = pmpro_getMembershipLevelsForUser($current_user->ID);
        $my_pages = array();
        if ($levels) {
            foreach ($levels as $key => $level) {
                //get restricted posts for level
                $sql = "SELECT page_id FROM {$wpdb->pmpro_memberships_pages} WHERE membership_id=" . $current_user->membership_level->ID;
                $member_pages = $wpdb->get_col($sql);
                $my_pages = array_unique(array_merge($my_pages, $member_pages));
            }
        }
        //get hidden page ids
        if (!empty($my_pages)) {
            $sql = "SELECT page_id FROM {$wpdb->pmpro_memberships_pages} WHERE page_id NOT IN(" . implode(',', $my_pages) . ")";
        } else {
            $sql = "SELECT page_id FROM {$wpdb->pmpro_memberships_pages}";
        }
        $hidden_page_ids = array_values(array_unique($wpdb->get_col($sql)));
        if ($hidden_page_ids) {
            if (empty($query->query_vars['post_parent'])) {
                //avoiding post_parent queries for now
                $query->set('post__not_in', $hidden_page_ids);
            }
        }
        //get categories that are filtered by level, but not my level
        global $pmpro_my_cats;
        $pmpro_my_cats = array();
        if ($levels) {
            foreach ($levels as $key => $level) {
                $member_cats = pmpro_getMembershipCategories($level->id);
                $pmpro_my_cats = array_unique(array_merge($pmpro_my_cats, $member_cats));
            }
        }
        //get hidden cats
        if (!empty($pmpro_my_cats)) {
            $sql = "SELECT category_id FROM {$wpdb->pmpro_memberships_categories} WHERE category_id NOT IN(" . implode(',', $pmpro_my_cats) . ")";
        } else {
            $sql = "SELECT category_id FROM {$wpdb->pmpro_memberships_categories}";
        }
        $hidden_cat_ids = array_values(array_unique($wpdb->get_col($sql)));
        //make this work
        if ($hidden_cat_ids) {
            $query->set('category__not_in', $hidden_cat_ids);
            //filter so posts in this member's categories are allowed
            add_action('posts_where', 'pmpro_posts_where_unhide_cats');
        }
    }
    return $query;
}