PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.3
Elementor Website Builder – more than just a page builder v4.0.3
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
← All changes | modules/wp-rest/classes/user-query.php +59 -43 4.2.24.0.3 View file →
@@ -8,15 +8,15 @@
8 8 if ( ! defined( 'ABSPATH' ) ) {
9 9 exit; // Exit if accessed directly.
10 10 }
11 11
12 -/**
13 - * @deprecated Use wp/v2/users instead. This endpoint proxies to wp/v2/users internally
14 - * and will be removed in 4.6.0 version.
15 - */
16 12 class User_Query extends Base {
17 13 const ENDPOINT = 'user';
18 -
14 + const SEARCH_FILTER_ACCEPTED_ARGS = 1;
15 + /**
16 + * @param \WP_REST_Request $request
17 + * @return \WP_REST_Response
18 + */
19 19 protected function get( \WP_REST_Request $request ) {
20 20 $params = $request->get_params();
21 21 $search_term = trim( $params[ self::SEARCH_TERM_KEY ] ?? '' );
22 22
@@ -34,66 +34,80 @@
34 34 $requested_count = $params[ self::ITEMS_COUNT_KEY ] ?? 0;
35 35 $validated_count = max( $requested_count, 1 );
36 36 $count = min( $validated_count, self::MAX_RESPONSE_COUNT );
37 37
38 - $wp_request = new \WP_REST_Request( 'GET', '/wp/v2/users' );
39 - $wp_request->set_param( 'search', $search_term );
40 - $wp_request->set_param( 'per_page', $count );
41 - $wp_request->set_param( 'context', 'edit' );
38 + $query_args = [
39 + 'number' => $count,
40 + 'search' => "*$search_term*",
41 + ];
42 42
43 - $response = rest_do_request( $wp_request );
43 + if ( ! empty( $params[ self::META_QUERY_KEY ] ) && is_array( $params[ self::META_QUERY_KEY ] ) ) {
44 + $query_args['meta_query'] = $params[ self::META_QUERY_KEY ];
45 + }
44 46
45 - if ( $response->is_error() ) {
46 - return new \WP_REST_Response( [
47 - 'success' => true,
48 - 'data' => [
49 - 'value' => [],
50 - ],
51 - ], 200 );
52 - }
47 + $this->add_filter_to_customize_query();
48 + $users = Collection::make( get_users( $query_args ) );
49 + $this->remove_filter_to_customize_query();
53 50
54 51 global $wp_roles;
55 52 $roles = $wp_roles->roles;
56 53
57 - $users = Collection::make( $response->get_data() );
58 -
59 - $result = new \WP_REST_Response( [
54 + return new \WP_REST_Response( [
60 55 'success' => true,
61 56 'data' => [
62 - 'value' => array_values( $users->map( function ( $user ) use ( $keys_format_map, $roles ) {
63 - $user_data = [
64 - 'ID' => $user['id'],
65 - 'display_name' => $user['name'],
66 - ];
57 + 'value' => array_values( $users
58 + ->map( function ( $user ) use ( $keys_format_map, $roles ) {
59 + $user_object = (array) $user;
60 + $user_object['display_name'] = $user->data->display_name;
67 61
68 - if ( ! empty( $user['roles'][0] ) ) {
69 - $user_role = $user['roles'][0];
70 - $role_name = $roles[ $user_role ]['name'] ?? ucfirst( $user_role );
71 - $user_data['role'] = $role_name;
72 - }
62 + if ( isset( $user_object['roles'][0] ) ) {
63 + $user_role = $user_object['roles'][0];
64 + $role = $roles[ $user_role ]['name'];
65 + $user_object['role'] = $role ?? ucfirst( $user_role );
66 + }
73 67
74 - return $this->translate_keys( $user_data, $keys_format_map );
75 - } )->all() ),
68 + return $this->translate_keys( $user_object, $keys_format_map );
69 + } )
70 + ->all() ),
76 71 ],
77 72 ], 200 );
73 + }
78 74
79 - _doing_it_wrong(
80 - 'elementor/v1/user',
81 - 'Use wp/v2/users instead. This endpoint will be removed in 4.6.0 version.',
82 - '4.0.4'
83 - );
75 + public function customize_user_query( $columns ) {
76 + if ( ! in_array( 'ID', $columns, true ) ) {
77 + $columns[] = 'ID';
78 + }
84 79
85 - return $result;
80 + return $columns;
86 81 }
87 82
88 - protected function permission_check( \WP_REST_Request $request ): bool {
89 - return current_user_can( 'list_users' );
83 + /**
84 + * @return void
85 + */
86 + private function add_filter_to_customize_query() {
87 + $priority = self::SEARCH_FILTER_PRIORITY;
88 + $accepted_args = self::SEARCH_FILTER_ACCEPTED_ARGS;
89 +
90 + add_filter( 'user_search_columns', [ $this, 'customize_user_query' ], $priority, $accepted_args );
90 91 }
91 92
93 + /**
94 + * @return void
95 + */
96 + private function remove_filter_to_customize_query() {
97 + $priority = self::SEARCH_FILTER_PRIORITY;
98 + $accepted_args = self::SEARCH_FILTER_ACCEPTED_ARGS;
99 +
100 + remove_filter( 'user_search_columns', [ $this, 'customize_user_query' ], $priority, $accepted_args );
101 + }
102 +
103 + /**
104 + * @return array
105 + */
92 106 protected function get_endpoint_registration_args(): array {
93 107 return [
94 108 self::SEARCH_TERM_KEY => [
95 - 'description' => 'Users to search',
109 + 'description' => 'Posts to search',
96 110 'type' => 'string',
97 111 'required' => false,
98 112 'default' => '',
99 113 'sanitize_callback' => 'sanitize_text_field',
@@ -109,9 +123,9 @@
109 123 ],
110 124 'sanitize_callback' => fn ( ...$args ) => self::sanitize_string_array( ...$args ),
111 125 ],
112 126 self::ITEMS_COUNT_KEY => [
113 - 'description' => 'Number of users to return',
127 + 'description' => 'Posts per page',
114 128 'type' => 'integer',
115 129 'required' => false,
116 130 'default' => self::MAX_RESPONSE_COUNT,
117 131 ],
@@ -116,8 +130,10 @@
116 130 'default' => self::MAX_RESPONSE_COUNT,
117 131 ],
118 132 ];
119 133 }
134 +
135 +
120 136
121 137 protected static function get_allowed_param_keys(): array {
122 138 return [
123 139 self::KEYS_CONVERSION_MAP_KEY,