Make WordPress Core


Ignore:
Timestamp:
02/28/2025 06:19:21 PM (18 months ago)
Author:
joemcgill
Message:

REST API: Add support for search_columns to the user endpoint.

This adds support for passing a search_columns argument to the user controller so that users with list_users caps can specify which field is being searched.

Props youknowriad, joemcgill, ntsekouras, mreishus, mamaduka.
Fixes 62596.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

    r59754 r59892  
    258258         *
    259259         * @since 4.7.0
     260         * @since 6.8.0 Added support for the search_columns query param.
    260261         *
    261262         * @param WP_REST_Request $request Full details about the request.
     
    332333                                $prepared_args['search_columns'] = array( 'ID', 'user_login', 'user_nicename', 'display_name' );
    333334                        }
     335                        $search_columns         = $request->get_param( 'search_columns' );
     336                        $valid_columns          = isset( $prepared_args['search_columns'] )
     337                                ? $prepared_args['search_columns']
     338                                : array( 'ID', 'user_login', 'user_nicename', 'user_email', 'display_name' );
     339                        $search_columns_mapping = array(
     340                                'id'       => 'ID',
     341                                'username' => 'user_login',
     342                                'slug'     => 'user_nicename',
     343                                'email'    => 'user_email',
     344                                'name'     => 'display_name',
     345                        );
     346                        $search_columns         = array_map(
     347                                static function ( $column ) use ( $search_columns_mapping ) {
     348                                        return $search_columns_mapping[ $column ];
     349                                },
     350                                $search_columns
     351                        );
     352                        $search_columns         = array_intersect( $search_columns, $valid_columns );
     353                        if ( ! empty( $search_columns ) ) {
     354                                $prepared_args['search_columns'] = $search_columns;
     355                        }
    334356                        $prepared_args['search'] = '*' . $prepared_args['search'] . '*';
    335357                }
     
    16141636                );
    16151637
     1638                $query_params['search_columns'] = array(
     1639                        'default'     => array(),
     1640                        'description' => __( 'Array of column names to be searched.' ),
     1641                        'type'        => 'array',
     1642                        'items'       => array(
     1643                                'enum' => array( 'email', 'name', 'id', 'username', 'slug' ),
     1644                                'type' => 'string',
     1645                        ),
     1646                );
     1647
    16161648                /**
    16171649                 * Filters REST API collection parameters for the users controller.
Note: See TracChangeset for help on using the changeset viewer.