Cómo iniciar sesión mediante la API de WordPress y obtener detalles del usuario
1. Instala y activa el plugin JWT Authentication for WP REST API, también instala el plugin WP REST API
2. Ahora puedes ejecutar cualquier API por defecto de WordPress desde una aplicación móvil o cualquier otra fuente o mediante Postman. Por ejemplo, accede a esta URL desde tu app o Postman: https://example.com/wp-json/wp/v2/posts
3. Mediante la app o Postman, cuando inicies sesión con credenciales válidas (usando la API REST) recibirás un token. Para iniciar sesión y obtener el token, ejecuta la siguiente URL en Postman o desde la app:
https://example.com/wp-json/jwt-auth/v1/token
4. De esta manera obtendrás un token como se muestra en la imagen
Ahora utiliza este token para obtener los detalles del usuario conectado, por ejemplo
5. Crea la siguiente función en functions.php
function checkloggedinuser()
{
$currentuserid_fromjwt = get_current_user_id();
print_r($currentuserid_fromjwt);
exit;
}
add_action('rest_api_init', function ()
{
register_rest_route( 'testone', 'loggedinuser',array(
'methods' => 'POST',
'callback' => 'checkloggedinuser'
));
});
6. Ahora ejecuta esta nueva URL en Postman o en la app para obtener los detalles del usuario conectado.
https://example.com/wp-json/testone/loggedinuser
(reemplaza example.com con tu URL)

Hola, tengo una solución más rápida y mejor para obtener el ID y más información como el avatar del usuario.
Solo añade esto a tu archivo functions.php:
/*
* Inserta datos adicionales al plugin JWT Auth
*/
function jwt_auth_function($data, $user) {
$data['user_role'] = $user->roles;
$data['user_id'] = $user->ID;
$data['avatar']= get_avatar_url($user->ID);
return $data;
}
add_filter( 'jwt_auth_token_before_dispatch', 'jwt_auth_function', 10, 2 );
Referencia: Cómo obtener el ID de usuario via API
Espero que esto te ayude

Resuelto:
add_action( 'rest_api_init', 'register_api_hooks' );
function register_api_hooks() {
register_rest_route(
'custom-plugin', '/login/',
array(
'methods' => 'POST',
'callback' => 'login',
)
);
}
function login($request){
$creds = array();
$creds['user_login'] = $request["username"];
$creds['user_password'] = $request["password"];
$creds['remember'] = true;
$user = wp_signon( $creds, true );
if ( is_wp_error($user) )
echo $user->get_error_message();
$id = $user->ID;
$meta = get_user_meta($id);
return $meta;
}

Esto es muy inseguro. Estás enviando el nombre de usuario y contraseña abiertamente en la URL.

No importa. Por favor lee el enlace a la documentación que publiqué como comentario. Hay formas adecuadas y más seguras de hacer esto.

@JacobPeattie ¿Estaría bien si usamos POST en lugar de GET? El enlace de documentación de WP que compartiste fue el primer lugar que consulté, pero no parece cubrir nada sobre cómo iniciar sesión.

Esto podría funcionar para nuestro caso de uso, que es permitir que los usuarios de nuestra aplicación de servidor inicien sesión de forma transparente con sus credenciales de Wordpress. Básicamente pasaríamos los detalles servidor-a-servidor a WP para autenticar al inicio de la sesión, y luego almacenaríamos en caché los detalles del usuario en nuestra base de datos. Así que solo hacemos autenticación básica una vez por sesión a través de una conexión confiable, evitando los problemas de seguridad, ya que el dispositivo cliente solo envía las credenciales una vez. Como medida de seguridad adicional, requeriremos una clave secreta compartida ya sea en el encabezado o como parte de la solicitud.
