WordPress.org

Make WordPress Core

Ticket #41847: 41847.diff

File 41847.diff, 6.9 KB (added by spacedmonkey, 3 years ago)
  • src/wp-includes/class-wp-user-query.php

     
    233233                $qv =& $this->query_vars;
    234234                $qv =  $this->fill_query_vars( $qv );
    235235
    236                 if ( is_array( $qv['fields'] ) ) {
    237                         $qv['fields'] = array_unique( $qv['fields'] );
    238 
    239                         $this->query_fields = array();
    240                         foreach ( $qv['fields'] as $field ) {
    241                                 $field = 'ID' === $field ? 'ID' : sanitize_key( $field );
    242                                 $this->query_fields[] = "$wpdb->users.$field";
    243                         }
    244                         $this->query_fields = implode( ',', $this->query_fields );
    245                 } elseif ( 'all' == $qv['fields'] ) {
    246                         $this->query_fields = "$wpdb->users.*";
    247                 } else {
    248                         $this->query_fields = "$wpdb->users.ID";
    249                 }
     236                $this->query_fields = "$wpdb->users.ID";
    250237
    251238                if ( isset( $qv['count_total'] ) && $qv['count_total'] )
    252239                        $this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields;
     
    590577
    591578                $this->request = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit";
    592579
    593                 if ( is_array( $qv['fields'] ) || 'all' == $qv['fields'] ) {
    594                         $this->results = $wpdb->get_results( $this->request );
    595                 } else {
     580                $key          = md5( $this->request );
     581                $last_changed = wp_cache_get_last_changed( 'comment' );
     582
     583                $cache_key   = "get_users:$key:$last_changed";
     584                $cache_value = wp_cache_get( $cache_key, 'comment' );
     585                if ( false !== $cache_value ) {
    596586                        $this->results = $wpdb->get_col( $this->request );
    597                 }
    598587
    599                 /**
    600                  * Filters SELECT FOUND_ROWS() query for the current WP_User_Query instance.
    601                  *
    602                  * @since 3.2.0
    603                  *
    604                  * @global wpdb $wpdb WordPress database abstraction object.
    605                  *
    606                  * @param string $sql The SELECT FOUND_ROWS() query for the current WP_User_Query.
    607                  */
    608                 if ( isset( $qv['count_total'] ) && $qv['count_total'] )
    609                         $this->total_users = (int) $wpdb->get_var( apply_filters( 'found_users_query', 'SELECT FOUND_ROWS()' ) );
     588                        /**
     589                         * Filters SELECT FOUND_ROWS() query for the current WP_User_Query instance.
     590                         *
     591                         * @since 3.2.0
     592                         *
     593                         * @global wpdb $wpdb WordPress database abstraction object.
     594                         *
     595                         * @param string $sql The SELECT FOUND_ROWS() query for the current WP_User_Query.
     596                         */
     597                        if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
     598                                $this->total_users = (int) $wpdb->get_var( apply_filters( 'found_users_query', 'SELECT FOUND_ROWS()' ) );
     599                        }
     600                        $cache_value = array(
     601                                'user_ids'    => $this->results,
     602                                'total_users' => $this->total_users,
     603                        );
     604                        wp_cache_add( $cache_key, $cache_value, 'users' );
     605                } else {
     606                        $this->results     = $cache_value['user_ids'];
     607                        $this->total_users = $cache_value['total_users'];
     608                }
    610609
    611                 if ( !$this->results )
     610                if ( ! $this->results ) {
    612611                        return;
     612                }
    613613
    614                 if ( 'all_with_meta' == $qv['fields'] ) {
    615                         cache_users( $this->results );
     614                $prime_meta_cache = ( 'all_with_meta' == $qv['fields'] );
     615                cache_users( $this->results, $prime_meta_cache );
    616616
    617                         $r = array();
    618                         foreach ( $this->results as $userid )
    619                                 $r[ $userid ] = new WP_User( $userid, '', $qv['blog_id'] );
    620 
    621                         $this->results = $r;
    622                 } elseif ( 'all' == $qv['fields'] ) {
    623                         foreach ( $this->results as $key => $user ) {
    624                                 $this->results[ $key ] = new WP_User( $user, '', $qv['blog_id'] );
     617                $r = array();
     618                foreach ( $this->results as $userid ) {
     619                        $r[] = new WP_User( $userid, '', $qv['blog_id'] );
     620                }
     621                if ( is_array( $qv['fields'] ) ) {
     622                        $nr = array();
     623                        foreach ( $r as $user ) {
     624                                $object = new stdClass;
     625                                foreach ( $qv['fields'] as $field ) {
     626                                        if ( isset( $user->$field ) ) {
     627                                                $object->$field = $user->$field;
     628                                        }
     629                                }
     630                                $nr[] = $object;
    625631                        }
     632                        $r = $nr;
    626633                }
     634                $this->results = $r;
     635
    627636        }
    628637
    629638        /**
  • src/wp-includes/ms-functions.php

     
    206206        do_action( 'add_user_to_blog', $user_id, $role, $blog_id );
    207207        wp_cache_delete( $user_id, 'users' );
    208208        wp_cache_delete( $blog_id . '_user_count', 'blog-details' );
     209        wp_cache_set( 'last_changed', microtime(), 'users' );
    209210        restore_current_blog();
    210211        return true;
    211212}
     
    293294        }
    294295
    295296        restore_current_blog();
    296 
     297        wp_cache_set( 'last_changed', microtime(), 'users' );
    297298        return true;
    298299}
    299300
  • src/wp-includes/user.php

     
    766766 * @param bool   $unique     Optional. Whether the same key should not be added. Default false.
    767767 * @return int|false Meta ID on success, false on failure.
    768768 */
    769 function add_user_meta($user_id, $meta_key, $meta_value, $unique = false) {
    770         return add_metadata('user', $user_id, $meta_key, $meta_value, $unique);
     769function add_user_meta( $user_id, $meta_key, $meta_value, $unique = false ) {
     770        $added = add_metadata( 'user', $user_id, $meta_key, $meta_value, $unique );
     771
     772        // Bust user query cache.
     773        if ( $added ) {
     774                wp_cache_set( 'last_changed', microtime(), 'users' );
     775        }
     776
     777        return $added;
    771778}
    772779
    773780/**
     
    785792 * @param mixed  $meta_value Optional. Metadata value.
    786793 * @return bool True on success, false on failure.
    787794 */
    788 function delete_user_meta($user_id, $meta_key, $meta_value = '') {
    789         return delete_metadata('user', $user_id, $meta_key, $meta_value);
     795function delete_user_meta( $user_id, $meta_key, $meta_value = '' ) {
     796        $deleted = delete_metadata( 'user', $user_id, $meta_key, $meta_value );
     797
     798        // Bust user query cache.
     799        if ( $deleted ) {
     800                wp_cache_set( 'last_changed', microtime(), 'users' );
     801        }
     802
     803        return $deleted;
    790804}
    791805
    792806/**
     
    821835 * @param mixed  $prev_value Optional. Previous value to check before removing.
    822836 * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
    823837 */
    824 function update_user_meta($user_id, $meta_key, $meta_value, $prev_value = '') {
    825         return update_metadata('user', $user_id, $meta_key, $meta_value, $prev_value);
     838function update_user_meta( $user_id, $meta_key, $meta_value, $prev_value = '' ) {
     839        $updated = update_metadata( 'user', $user_id, $meta_key, $meta_value, $prev_value );
     840
     841        // Bust user query cache.
     842        if ( $updated ) {
     843                wp_cache_set( 'last_changed', microtime(), 'users' );
     844        }
     845
     846        return $updated;
    826847}
    827848
    828849/**
     
    12961317        wp_cache_delete( $user->user_email, 'useremail' );
    12971318        wp_cache_delete( $user->user_nicename, 'userslugs' );
    12981319
     1320        wp_cache_set( 'last_changed', microtime(), 'users' );
     1321
    12991322        /**
    13001323         * Fires immediately after the given user's cache is cleaned.
    13011324         *
     
    17391762        }
    17401763        wp_cache_delete( $user_id, 'users' );
    17411764        wp_cache_delete( $user_login, 'userlogins' );
    1742 
     1765        wp_cache_set( 'last_changed', microtime(), 'users' );
    17431766        if ( $update ) {
    17441767                /**
    17451768                 * Fires immediately after an existing user is updated.