Skip to content

Commit

Permalink
REST API: Support search_columns argument in the user endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
youknowriad committed Nov 26, 2024
1 parent 8c34d91 commit aad1b37
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 1 deletion.
64 changes: 64 additions & 0 deletions lib/compat/wordpress-6.8/class-gutenberg-rest-user-controller.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

/**
* Add search_columns parameter to users endpoint parameters
*
* @param array $query_params JSON Schema-formatted collection parameters.
* @return array Updated collection parameters
*/
function gutenberg_add_search_columns_param( $query_params ) {
$query_params['search_columns'] = array(
'default' => array(),
'description' => __( 'Array of column names to be searched.' ),
'type' => 'array',
'items' => array(
'enum' => array( 'email', 'name', 'id', 'username', 'slug' ),
'type' => 'string',
),
);

return $query_params;
}

add_filter( 'rest_user_collection_params', 'gutenberg_add_search_columns_param', 10, 1 );

/**
* Modify user query based on search_columns parameter
*
* @param array $prepared_args Array of arguments for WP_User_Query.
* @param WP_REST_Request $request The REST API request.
* @return array Modified arguments
*/
function gutenberg_modify_user_query_args( $prepared_args, $request ) {
if ( $request->get_param( 'search' ) && $request->get_param( 'search_columns' ) ) {
$search_columns = $request->get_param( 'search_columns' );

// Validate search columns
$valid_columns = isset( $prepared_args['search_columns'] )
? $prepared_args['search_columns']
: array( 'ID', 'user_login', 'user_nicename', 'user_email', 'user_url', 'display_name' );
$search_columns_mapping = array(
'id' => 'ID',
'username' => 'user_login',
'slug' => 'user_nicename',
'email' => 'user_email',
'name' => 'display_name',
);
$search_columns = array_map(
function ( $column ) use ( $search_columns_mapping ) {
return isset( $search_columns_mapping[ $column ] )
? $search_columns_mapping[ $column ]
: $column;
},
$search_columns
);
$search_columns = array_intersect( $search_columns, $valid_columns );

if ( ! empty( $search_columns ) ) {
$prepared_args['search_columns'] = $search_columns;
}
}

return $prepared_args;
}
add_filter( 'rest_user_query', 'gutenberg_modify_user_query_args', 10, 2 );
1 change: 1 addition & 0 deletions lib/load.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ function gutenberg_is_experiment_enabled( $name ) {
require __DIR__ . '/compat/wordpress-6.8/blocks.php';
require __DIR__ . '/compat/wordpress-6.8/functions.php';
require __DIR__ . '/compat/wordpress-6.8/post.php';
require __DIR__ . '/compat/wordpress-6.8/class-gutenberg-rest-user-controller.php';

// Experimental features.
require __DIR__ . '/experimental/block-editor-settings-mobile.php';
Expand Down
2 changes: 1 addition & 1 deletion packages/editor/src/components/post-author/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ export const BASE_QUERY = {

export const AUTHORS_QUERY = {
who: 'authors',
per_page: 50,
per_page: 100,
...BASE_QUERY,
};
1 change: 1 addition & 0 deletions packages/editor/src/components/post-author/hook.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export function useAuthorsQuery( search ) {

if ( search ) {
query.search = search;
query.search_columns = [ 'name' ];
}

return {
Expand Down

0 comments on commit aad1b37

Please sign in to comment.