Get user first name from custom endpoint
Вопрос
I am trying to set up a custom endpoint which only returns some user data instead of the default data sent back by the users endpoint. But I don't know how to get the first and last name of the user from WP_User_Query
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', 'some-endpoint', array(
'methods' => 'GET',
'callback' => 'my_awesome_func',
) );
} );
function my_awesome_func( $request) {
$user_fields = array( 'user_nicename', 'user_url', 'first_name' );
$wp_user_query = new WP_User_Query( array( 'role' => 'subscriber', 'fields' => $user_fields ) );
$members = $wp_user_query->get_results();
return new WP_REST_Response(
array(
'status' => 200,
'response' => $members
)
);
return $response;
}
If I remove 'first_name' from my array then I get back user_nicename and user_url in the response for all users. But with first_name in there I just get an empty response. I also tried firstname
instead of first_name
but still no joy.
Also, this only returns a handful of users. How do I show them all or 10, 20, 30 etc.
Решение
If you look at the documentation, first_name
is not in the list of accepted values for the fields
parameter, and if you enabled debugging, you'd see adding first_name
to that parameter would actually cause a database error — Unknown column 'wp_users.first_name' in 'field list'
. And the same goes to the "firstname" and any other non-standard values.
So as the documentation says, "You must create a second query to get the user meta fields by ID or use the __get
PHP magic method to get the values of these fields.", you would need to manually add the first_name
item to your $members
array like so:
// &$member means we're modifying the original $members array
foreach ( $members as &$member ) {
$member->first_name = get_user_meta( $member->ID, 'first_name', true );
}
But make sure ID
is in the field list, e.g. $user_fields = array( 'user_nicename', 'user_url', 'ID' );
.
And as for controlling the number of results, check the pagination parameters like number
:
// Get at most 10 users (per page).
$user_query = new WP_User_Query( array( 'number' => 10 ) );
And BTW, remember to set permission_callback
for your custom REST API endpoint.