mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-16 13:13:33 +09:00
Optimize member directory and pagination
This commit is contained in:
+53
-25
@@ -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
@@ -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 );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user