Obteniendo metadatos de usuario desde la API REST de WP
Estoy trabajando en un proyecto utilizando la API REST de WordPress junto con VueJS y Axios (para las llamadas AJAX para obtener/enviar datos al sitio). Sin embargo, necesito acceder a los metadatos de un usuario, como 'collapsed_widgets', desde la API REST, pero los datos que recibo en la respuesta GET son:
"meta": [],
Esto ocurre para TODOS los usuarios, lo cual es extraño porque debería haber datos ahí.
¿Existe alguna forma de obtener los metadatos de los usuarios?

Mira register_rest_field()
para registrar meta con la API REST.
add_action( 'rest_api_init', 'adding_user_meta_rest' );
function adding_user_meta_rest() {
register_rest_field( 'user',
'collapsed_widgets',
array(
'get_callback' => 'user_meta_callback',
'update_callback' => null,
'schema' => null,
)
);
}
Y luego coloca tu parte de get_user_meta
en el callback.
function user_meta_callback( $user, $field_name, $request) {
return get_user_meta( $user[ 'id' ], $field_name, true );
}
La clase WP_REST_Meta_Fields también puede proporcionar información más útil.
Actualización según el comentario del OP sobre el registro de rutas personalizadas
Un ejemplo parcial rápido y sencillo. Ensamblado a partir de algunas cosas que tengo frente a mí, pero no es un ejemplo funcional.
Puede ayudar mientras lees la documentación. Sigue la conexión entre el primer register_rest_route
, su método GET
callback, my_get_callback
, abajo, y el uso del método callback de la clase WP_Rest_Request
. Debería ayudar a entender los pasos. La documentación que mencioné en los comentarios entrará en otros argumentos, parámetros, etc., y por supuesto, el tema de permissions_callback
.
Espero que ayude.
class My_Extend_Rest extends WP_REST_Controller {
public function __construct() {
add_action( 'rest_api_init', array( $this, 'register_routes' ) );
}//end __construct
public function register_routes() {
$version = '1';
$namespace = 'my-fancy-namespace/v' . $version;
$base = 'my-route-base';
// entonces, sitio.com/wp-json/my-fancy-namespace/v2/my-route-base/
register_rest_route( $namespace, '/'. $base, array(
array(
'methods' => 'GET',
'callback' => array( $this, 'my_get_callback' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),
array(
'methods' => 'POST',
'callback' => array( $this, 'my_post_callback' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),)
);
$base2 = 'my-second-base';
// entonces, sitio.com/wp-json/my-fancy-namespace/v2/my-second-base/
register_rest_route( $namespace, '/'. $base2, array(
array(
'methods' => 'GET',
'callback' => array( $this, 'my_get_callback_two' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),
array(
'methods' => 'POST',
'callback' => array( $this, 'my_post_callback_two' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),)
);
}//register_routes
public function key_permissions_check() {
//hacer comprobaciones de permisos
}
public function my_get_callback( WP_REST_Request $request ) {
//hacer cosas con $request
//ver los métodos mencionados en el comentario

¡Ok, excelente! Esto era lo que necesitaba pero después de algunas pruebas y reflexión, ya que necesito poder enviar datos de vuelta a la API para actualizar, creo que lo que necesitaré hacer ahora es registrar 3 rutas personalizadas. Una para 'collapsed_widgets', una para 'selected_categories' y una para 'quick_links'.
¿Tienes algún ejemplo de esas rutas mientras trabajo en ellas? :)

Normalmente extiendo la clase WP_Rest_Controller
, así que échale un vistazo seguro. Y luego revisa la clase WP_Rest_Request y sus muchos métodos.

Puedes usar register_meta
para registrar el meta y hacerlo accesible en la REST API:
\register_meta(
'user', // Tipo de objeto (usuario)
'collapsed_widgets', // Nombre del campo meta
[
'show_in_rest' => true, // Mostrar en REST API
'single' => true, // Meta único (no un array)
'type' => 'array', // Tipo de dato (array)
]
);
De esta manera también puedes actualizar el campo meta a través de la REST API.
