mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-16 13:13:33 +09:00
- User queries performance fix;
This commit is contained in:
@@ -65,11 +65,8 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
$this->target_id = null;
|
||||
|
||||
// When the cache should be cleared
|
||||
add_action( 'um_delete_user_hook', array( &$this, 'remove_cached_queue' ) );
|
||||
add_action( 'um_delete_user', array( &$this, 'remove_cache' ), 10, 1 );
|
||||
|
||||
add_action( 'um_after_user_status_is_changed_hook', array( &$this, 'remove_cached_queue' ) );
|
||||
|
||||
// When user cache should be cleared
|
||||
add_action( 'um_after_user_updated', array( &$this, 'remove_cache' ) );
|
||||
add_action( 'um_after_user_account_updated', array( &$this, 'remove_cache' ) );
|
||||
@@ -111,6 +108,74 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
add_action( 'added_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 );
|
||||
|
||||
add_action( 'deleted_user_meta', array( &$this, 'on_delete_usermeta' ), 10, 4 );
|
||||
|
||||
|
||||
add_action( 'update_user_meta', array( &$this, 'flush_um_count_users_transient_update' ), 10, 4 );
|
||||
add_action( 'added_user_meta', array( &$this, 'flush_um_count_users_transient_add' ), 10, 4 );
|
||||
add_action( 'delete_user_meta', array( &$this, 'flush_um_count_users_transient_delete' ), 10, 4 );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $meta_ids
|
||||
* @param $object_id
|
||||
* @param $meta_key
|
||||
* @param $_meta_value
|
||||
*/
|
||||
public function flush_um_count_users_transient_update( $meta_ids, $object_id, $meta_key, $_meta_value ) {
|
||||
if ( 'account_status' !== $meta_key ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$old = get_user_meta( $object_id, $meta_key, true );
|
||||
|
||||
$values = array( $old, $_meta_value );
|
||||
foreach ( $values as $value ) {
|
||||
delete_transient( "um_count_users_{$value}" );
|
||||
}
|
||||
|
||||
$maybe_flush_pending = array_intersect( $values, array( 'awaiting_email_confirmation', 'awaiting_admin_review' ) );
|
||||
if ( ! empty( $maybe_flush_pending ) ) {
|
||||
delete_transient( 'um_count_users_pending' );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $meta_ids
|
||||
* @param $object_id
|
||||
* @param $meta_key
|
||||
* @param $_meta_value
|
||||
*/
|
||||
public function flush_um_count_users_transient_add( $meta_ids, $object_id, $meta_key, $_meta_value ) {
|
||||
if ( 'account_status' !== $meta_key ) {
|
||||
return;
|
||||
}
|
||||
|
||||
delete_transient( "um_count_users_{$_meta_value}" );
|
||||
if ( in_array( $_meta_value, array( 'awaiting_email_confirmation', 'awaiting_admin_review' ), true ) ) {
|
||||
delete_transient( 'um_count_users_pending' );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $meta_ids
|
||||
* @param $object_id
|
||||
* @param $meta_key
|
||||
* @param $_meta_value
|
||||
*/
|
||||
public function flush_um_count_users_transient_delete( $meta_ids, $object_id, $meta_key, $_meta_value ) {
|
||||
if ( 'account_status' !== $meta_key ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$value = ( '' !== $_meta_value ) ? $_meta_value : get_user_meta( $object_id, $meta_key, true );
|
||||
delete_transient( "um_count_users_{$value}" );
|
||||
|
||||
if ( in_array( $value, array( 'awaiting_email_confirmation', 'awaiting_admin_review' ), true ) ) {
|
||||
delete_transient( 'um_count_users_pending' );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -226,7 +291,7 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
$hide_in_members = UM()->member_directory()->get_hide_in_members_default();
|
||||
if ( ! empty( $_meta_value ) ) {
|
||||
if ( $_meta_value == 'Yes' || $_meta_value == __( 'Yes', 'ultimate-member' ) ||
|
||||
array_intersect( array( 'Yes', __( 'Yes', 'ultimate-member' ) ), $_meta_value ) ) {
|
||||
array_intersect( array( 'Yes', __( 'Yes', 'ultimate-member' ) ), $_meta_value ) ) {
|
||||
$hide_in_members = true;
|
||||
} else {
|
||||
$hide_in_members = false;
|
||||
@@ -324,6 +389,8 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
// remove uploads
|
||||
UM()->files()->remove_dir( UM()->files()->upload_temp );
|
||||
UM()->files()->remove_dir( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR );
|
||||
|
||||
delete_transient( 'um_count_users_unassigned' );
|
||||
}
|
||||
|
||||
|
||||
@@ -391,60 +458,6 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get pending users (in queue)
|
||||
*/
|
||||
function get_pending_users_count() {
|
||||
|
||||
$cached_users_queue = get_option( 'um_cached_users_queue' );
|
||||
if ( $cached_users_queue > 0 && ! isset( $_REQUEST['delete_count'] ) ) {
|
||||
return $cached_users_queue;
|
||||
}
|
||||
|
||||
$args = array( 'fields' => 'ID', 'number' => 1 );
|
||||
$args['meta_query']['relation'] = 'OR';
|
||||
$args['meta_query'][] = array(
|
||||
'key' => 'account_status',
|
||||
'value' => 'awaiting_email_confirmation',
|
||||
'compare' => '='
|
||||
);
|
||||
$args['meta_query'][] = array(
|
||||
'key' => 'account_status',
|
||||
'value' => 'awaiting_admin_review',
|
||||
'compare' => '='
|
||||
);
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
* @type filter
|
||||
* @title um_admin_pending_queue_filter
|
||||
* @description Change user query arguments when get pending users
|
||||
* @input_vars
|
||||
* [{"var":"$args","type":"array","desc":"WP_Users query arguments"}]
|
||||
* @change_log
|
||||
* ["Since: 2.0"]
|
||||
* @usage
|
||||
* <?php add_filter( 'um_admin_pending_queue_filter', 'function_name', 10, 1 ); ?>
|
||||
* @example
|
||||
* <?php
|
||||
* add_filter( 'um_admin_pending_queue_filter', 'my_admin_pending_queue', 10, 1 );
|
||||
* function my_admin_pending_queue( $args ) {
|
||||
* // your code here
|
||||
* return $args;
|
||||
* }
|
||||
* ?>
|
||||
*/
|
||||
$args = apply_filters( 'um_admin_pending_queue_filter', $args );
|
||||
$users = new \WP_User_Query( $args );
|
||||
|
||||
delete_option( 'um_cached_users_queue' );
|
||||
add_option( 'um_cached_users_queue', $users->get_total(), '', 'no' );
|
||||
|
||||
return $users->get_total();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $user_id
|
||||
*
|
||||
@@ -634,6 +647,7 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
do_action( 'um_user_register', $user_id, $_POST );
|
||||
}
|
||||
|
||||
delete_transient( 'um_count_users_unassigned' );
|
||||
}
|
||||
|
||||
|
||||
@@ -807,14 +821,6 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove cached queue from Users backend
|
||||
*/
|
||||
function remove_cached_queue() {
|
||||
delete_option( 'um_cached_users_queue' );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts object to array
|
||||
*
|
||||
@@ -1053,11 +1059,11 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
$role_meta = apply_filters( 'um_user_permissions_filter', $role_meta, $this->id );
|
||||
|
||||
/*$role_meta = array_map( function( $key, $item ) {
|
||||
if ( strpos( $key, '_um_' ) === 0 )
|
||||
$key = str_replace( '_um_', '', $key );
|
||||
if ( strpos( $key, '_um_' ) === 0 )
|
||||
$key = str_replace( '_um_', '', $key );
|
||||
|
||||
return array( $key => $item );
|
||||
}, array_keys( $role_meta ), $role_meta );*/
|
||||
return array( $key => $item );
|
||||
}, array_keys( $role_meta ), $role_meta );*/
|
||||
|
||||
$this->profile = array_merge( $this->profile, (array)$role_meta );
|
||||
|
||||
@@ -2187,5 +2193,27 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
||||
$replace_placeholders[] = um_user( 'account_activation_link' );
|
||||
return $replace_placeholders;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get pending users (in queue)
|
||||
*
|
||||
* @deprecated 2.4.2
|
||||
*/
|
||||
function get_pending_users_count() {
|
||||
_deprecated_function( __METHOD__, '2.4.2', 'UM()->query()->get_pending_users_count()' );
|
||||
return UM()->query()->get_pending_users_count();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove cached queue from Users backend
|
||||
*
|
||||
* @deprecated 2.4.2
|
||||
*/
|
||||
function remove_cached_queue() {
|
||||
_deprecated_function( __METHOD__, '2.4.2', '' );
|
||||
delete_option( 'um_cached_users_queue' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user