Make WordPress Core


Ignore:
Timestamp:
04/25/2022 12:55:35 PM (3 years ago)
Author:
audrasjb
Message:

Users: Make sure WP_User_Query can be filtered using the fields parameter.

This change ensures the fields parameter is taken into account when running WP_User_Query by fixing the conditional statement used to process the fields param.

Props rilwis, peterwilsoncc, NomNom99, hellofromTonya, audrasjb, rilwis, Boniu91.
Fixes #53177.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-user-query.php

    r52977 r53255  
    275275        $qv = $this->fill_query_vars( $qv );
    276276
     277        $allowed_fields = array(
     278            'ID',
     279            'display_name',
     280            'user_login',
     281            'user_nicename',
     282            'user_email',
     283            'user_url',
     284            'user_registered',
     285        );
     286
    277287        if ( is_array( $qv['fields'] ) ) {
    278288            $qv['fields'] = array_unique( $qv['fields'] );
     
    284294            }
    285295            $this->query_fields = implode( ',', $this->query_fields );
    286         } elseif ( 'all' === $qv['fields'] ) {
     296        } elseif ( ! in_array( $qv['fields'], $allowed_fields, true ) ) {
    287297            $this->query_fields = "$wpdb->users.*";
    288298        } else {
    289             $this->query_fields = "$wpdb->users.ID";
     299            $field              = 'ID' === $qv['fields'] ? 'ID' : sanitize_key( $qv['fields'] );
     300            $this->query_fields = "$wpdb->users.$field";
    290301        }
    291302
Note: See TracChangeset for help on using the changeset viewer.