Optimize member directory and pagination

This commit is contained in:
champsupertramp
2016-08-13 12:59:03 +08:00
parent 2a449e2c56
commit a85a687ba7
2 changed files with 68 additions and 32 deletions
+53 -25
View File
@@ -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
+15 -7
View File
@@ -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 );
}