From a85a687ba7f78c45af2777535e1e67cbe3dd1104 Mon Sep 17 00:00:00 2001 From: champsupertramp Date: Sat, 13 Aug 2016 12:59:03 +0800 Subject: [PATCH] Optimize member directory and pagination --- core/um-filters-members.php | 78 +++++++++++++++++++++++++------------ core/um-members.php | 22 +++++++---- 2 files changed, 68 insertions(+), 32 deletions(-) diff --git a/core/um-filters-members.php b/core/um-filters-members.php index 2906e151..effdbff5 100644 --- a/core/um-filters-members.php +++ b/core/um-filters-members.php @@ -56,9 +56,17 @@ } $query_args['meta_query'][] = array( - 'key' => 'hide_in_members', - 'value' => '', - 'compare' => 'NOT EXISTS' + "relation" => "OR", + array( + 'key' => 'hide_in_members', + 'value' => '', + 'compare' => 'NOT EXISTS' + ), + array( + 'key' => 'hide_in_members', + 'value' => 'Yes', + 'compare' => 'NOT LIKE' + ) ); return $query_args; @@ -90,6 +98,10 @@ if ( $value && $field != 'um_search' && $field != 'page_id' ) { + if( strstr( $field, 'role_') ){ + $field = 'role'; + } + if ( !in_array( $field, $ultimatemember->members->core_search_fields ) ) { $query_args['meta_query'][] = array( @@ -99,9 +111,9 @@ 'compare' => '=', ), array( - 'key' => $field, - 'value' => trim( $serialize_value ), - 'compare' => 'LIKE', + 'key' => $field, + 'value' => trim( $serialize_value ), + 'compare' => 'LIKE', ), 'relation' => 'OR', ); @@ -144,26 +156,42 @@ $query_args['meta_query']['relation'] = 'AND'; // must have a profile photo - if ( $has_profile_photo == 1 && ! um_get_option('use_gravatars') ) { - $query_args['meta_query'][] = array( - 'relation' => 'OR', - array( - 'key' => 'synced_profile_photo', // addons - 'value' => '', - 'compare' => '!=' - ), - array( - 'key' => 'profile_photo', // from upload form - 'value' => '', - 'compare' => '!=' - ), - array( - 'key' => 'synced_gravatar_hashed_id', // gravatar - 'value' => '', - 'compare' => '!=' - ) + if ( $has_profile_photo == 1 ) { + if( um_get_option('use_gravatars') ){ + $query_args['meta_query'][] = array( + 'relation' => 'OR', + array( + 'key' => 'synced_profile_photo', // addons + 'value' => '', + 'compare' => '!=' + ), + array( + 'key' => 'profile_photo', // from upload form + 'value' => '', + 'compare' => '!=' + ), + array( + 'key' => 'synced_gravatar_hashed_id', // gravatar + 'value' => '', + 'compare' => '!=' + ) - ); + ); + }else{ + $query_args['meta_query'][] = array( + 'relation' => 'OR', + array( + 'key' => 'synced_profile_photo', // addons + 'value' => '', + 'compare' => '!=' + ), + array( + 'key' => 'profile_photo', // from upload form + 'value' => '', + 'compare' => '!=' + ) + ); + } } // must have a cover photo diff --git a/core/um-members.php b/core/um-members.php index cbbb5710..6b573066 100644 --- a/core/um-members.php +++ b/core/um-members.php @@ -152,26 +152,33 @@ class UM_Members { // Add filter to optimize BIG Select with multiple LEFT JOINs add_filter( 'pre_user_query', array( $this, 'um_optimize_member_query' ) ); - $users = new WP_User_Query( $query_args ); + // number of profiles for mobile + if ( $ultimatemember->mobile->isMobile() && isset( $profiles_per_page_mobile ) ){ + $profiles_per_page = $profiles_per_page_mobile; + } + $query_args['number'] = $profiles_per_page; + + $members_page = isset($_REQUEST['members_page']) ? $_REQUEST['members_page'] : 1; + + $query_args['paged'] = $members_page; + + $users = new WP_User_Query( $query_args ); + remove_filter( 'pre_user_query', array( $this, 'um_optimize_member_query' ) ); - // number of profiles for mobile - if ( $ultimatemember->mobile->isMobile() && isset( $profiles_per_page_mobile ) ) - $profiles_per_page = $profiles_per_page_mobile; - $array['users'] = array_unique( $users->results ); $array['total_users'] = (isset( $max_users ) && $max_users && $max_users <= $users->total_users ) ? $max_users : $users->total_users; - $array['page'] = isset($_REQUEST['members_page']) ? $_REQUEST['members_page'] : 1; + $array['page'] = $members_page; $array['total_pages'] = ceil( $array['total_users'] / $profiles_per_page ); $array['header'] = $this->convert_tags( $header, $array ); $array['header_single'] = $this->convert_tags( $header_single, $array ); - $array['users_per_page'] = array_slice($array['users'], ( ( $profiles_per_page * $array['page'] ) - $profiles_per_page ), $profiles_per_page ); + $array['users_per_page'] = $array['users']; for( $i = $array['page']; $i <= $array['page'] + 2; $i++ ) { if ( $i <= $array['total_pages'] ) { @@ -255,6 +262,7 @@ class UM_Members { } return apply_filters('um_prepare_user_results_array', $array ); + }